Guest User

Untitled

a guest
Apr 22nd, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.40 KB | None | 0 0
  1. public class User : IEntity, IReturnType
  2. {
  3. public long Id { get; set; }
  4. public string FirstName { get; set; }
  5. public string LastName { get; set; }
  6. public DateTime Dob { get; set; }
  7. public bool IsActive { get; set; }
  8. }
  9.  
  10. public class Product : IEntity, IReturnType
  11. {
  12. //properties...
  13. }
  14.  
  15. public class UserService
  16. {
  17. //UserService doesn't know about real repos class however it knows those three guys can do csv, sqlserver, oracle operations
  18. //private readonly ICsvRepo<User> _csvSource;
  19. //private ISqlServerRepo<User> _sqlServerSource;
  20. //private IOracleRepo<User> _oracleSource;
  21.  
  22.  
  23. public UserService()
  24. {
  25. //like factory for all concrete repos
  26. var kernel = new StandardKernel(new RepoModule("foo", "bar")); /*some other modules here maybe?*/
  27.  
  28. //IoC ensure to get concrete object like factory however UserService doesn't know it
  29. var csvSource = kernel.Get<ICsvRepo<User>>();
  30. //use things
  31. csvSource.GetAll();
  32. csvSource.GetByLine();
  33.  
  34. //IoC ensure to get concrete object like factory however UserService doesn't know it
  35. var sqlRepo = kernel.Get<ISqlServerRepo<User>>();
  36. //use things
  37. sqlRepo.GetAll();
  38. sqlRepo.GetById(34);
  39.  
  40. //IoC ensure to get concrete object like factory however UserService doesn't know it
  41. var oracleManager = kernel.Get<IOracleRepo<User>>();
  42. //use things
  43. oracleManager.GetAll();
  44. oracleManager.GetById(34);
  45.  
  46.  
  47. }
  48. }
  49.  
  50. public interface IRepo { }
  51.  
  52. public interface IRepoX : IRepo { }
  53.  
  54. public interface IRepositoryDatasource<out T> : IRepo where T : IGeneric
  55. {
  56. IEnumerable<T> GetAll();
  57. }
  58.  
  59. public interface ICsvRepo<out T> : IRepositoryDatasource<T> where T : IReturnType
  60. {
  61. IEnumerable<T> GetByLine();
  62. }
  63.  
  64. public interface IDatabaseRepo<T> : IRepositoryDatasource<T> where T : IEntity
  65. {
  66. T GetById(int id);
  67. T GetByName(string name);
  68. void Add(T entity);
  69. void Delete(T entity);
  70. }
  71.  
  72. public interface IOracleRepo<T> : IDatabaseRepo<T> where T : IEntity
  73. {
  74. //add more concrete to Oracle database if needed
  75. }
  76.  
  77. public interface ISqlServerRepo<T> : IDatabaseRepo<T> where T : IEntity
  78. {
  79. //add more concrete to Sql Server database if needed
  80. }
  81.  
  82. public interface ICsvSettings
  83. {
  84. string Path { get; }
  85. string FileName { get; }
  86. }
  87.  
  88. public interface ISqlSettings
  89. {
  90. string ConnectionString { get; }
  91. string Username { get; }
  92. string Password { get; }
  93. }
  94.  
  95. internal class CsvSettings : ICsvSettings
  96. {
  97. public string Path { get; set; }
  98. public string FileName { get; set; }
  99. }
  100.  
  101. internal class SqlSettings : ISqlSettings
  102. {
  103. public string ConnectionString { get; set; }
  104. public string Username { get; set; }
  105. public string Password { get; set; }
  106. }
  107.  
  108. internal class OracleRepo<T> : IDatabaseRepo<T> where T : IEntity
  109. {
  110. private readonly ISqlSettings _settings;
  111. private readonly IRepoX _repoX;
  112.  
  113. public OracleRepo(ISqlSettings settings, IRepoX repoX)
  114. {
  115. _settings = settings;
  116. _repoX = repoX;
  117. }
  118.  
  119. public IEnumerable<T> GetAll()
  120. {
  121. throw new NotImplementedException();
  122. }
  123.  
  124. public T GetById(int id)
  125. {
  126. throw new NotImplementedException();
  127. }
  128.  
  129. public T GetByName(string name)
  130. {
  131. throw new NotImplementedException();
  132. }
  133.  
  134. public void Add(T entity)
  135. {
  136. throw new NotImplementedException();
  137. }
  138.  
  139. public void Delete(T entity)
  140. {
  141. throw new NotImplementedException();
  142. }
  143. }
  144.  
  145. internal class SqlServerRepo<T> : IDatabaseRepo<T> where T : IEntity
  146. {
  147. private readonly ISqlSettings _settings;
  148. private readonly IRepoX _repoX;
  149.  
  150. public SqlServerRepo(ISqlSettings settings, IRepoX repoX)
  151. {
  152. _settings = settings;
  153. _repoX = repoX;
  154. }
  155.  
  156. public IEnumerable<T> GetAll()
  157. {
  158. throw new NotImplementedException();
  159. }
  160.  
  161. public T GetById(int id)
  162. {
  163. throw new NotImplementedException();
  164. }
  165.  
  166. public T GetByName(string name)
  167. {
  168. throw new NotImplementedException();
  169. }
  170.  
  171. public void Add(T entity)
  172. {
  173. throw new NotImplementedException();
  174. }
  175.  
  176. public void Delete(T entity)
  177. {
  178. throw new NotImplementedException();
  179. }
  180. }
  181.  
  182. internal abstract class CsvRepo<T> : ICsvRepo<T> where T : IReturnType
  183. {
  184. protected readonly ICsvSettings Settings;
  185.  
  186. protected CsvRepo(ICsvSettings settings)
  187. {
  188. Settings = settings;
  189. }
  190.  
  191. public virtual IEnumerable<T> GetAll()
  192. {
  193. throw new NotImplementedException();
  194. }
  195.  
  196. public virtual IEnumerable<T> GetByLine()
  197. {
  198. throw new NotImplementedException();
  199. }
  200.  
  201. //public abstract IEnumerable<T> GetRecordsFromFile();
  202. }
  203.  
  204. //more concrete repository class uses concrete InputData1
  205. //this is because at CsvRepo was not possible to Yield IEntity... because at this
  206. //point we dont know what to return InputData1, InputData2 etc.. therefire inheritance solve that issue
  207. internal class ReturnTypeAbcCsvRepo : CsvRepo<ReturnTypeAbc>
  208. {
  209. public ReturnTypeAbcCsvRepo(ICsvSettings settings) : base(settings)
  210. {
  211. }
  212.  
  213. public override IEnumerable<ReturnTypeAbc> GetAll()
  214. {
  215. return from line in File.ReadLines(Settings.Path)
  216. select line.Split(',') into parts
  217. where parts.Length == 3
  218. select new ReturnTypeAbc { A = Convert.ToInt32(parts[0]), B = Convert.ToInt32(parts[1]), C = Convert.ToInt32(parts[2]) };
  219. }
  220. }
  221.  
  222. internal class ReturnTypeXyzCsvRepo : CsvRepo<ReturnTypeXyz>
  223. {
  224. public ReturnTypeXyzCsvRepo(ICsvSettings settings) : base(settings)
  225. {
  226. }
  227. public override IEnumerable<ReturnTypeXyz> GetAll()
  228. {
  229. return from line in File.ReadLines(Settings.Path)
  230. select line.Split(',') into parts
  231. where parts.Length == 3
  232. select new ReturnTypeXyz { X = Convert.ToInt32(parts[0]), Y = Convert.ToInt32(parts[1]), Z = Convert.ToInt32(parts[2]) };
  233. }
  234. }
  235. }
  236.  
  237. internal class RepoX : IRepoX { }
  238.  
  239. public class RepoModule : NinjectModule
  240. {
  241. private readonly string _username;
  242. private readonly string _password;
  243. public RepoModule(string username, string password)
  244. {
  245. _username = username;
  246. _password = password;
  247. }
  248. public override void Load()
  249. {
  250. Bind<ICsvSettings>().ToConstant(new CsvSettings
  251. {
  252. FileName = "foo",
  253. Path = Config.Instance.ServerName,
  254. }).InSingletonScope();
  255.  
  256. Bind<ISqlSettings>().ToConstant(new SqlSettings
  257. {
  258. ConnectionString = "foo",
  259. Password = _password,
  260. Username = _username
  261. }).InSingletonScope();
  262.  
  263.  
  264.  
  265. Bind<IRepoX>().To<RepoX>();
  266.  
  267. Bind(typeof(ICsvRepo<ReturnTypeAbc>)).To(typeof(ReturnTypeAbcCsvRepo));
  268. Bind(typeof(ICsvRepo<ReturnTypeXyz>)).To(typeof(ReturnTypeXyz));
  269.  
  270. Bind(typeof(ICsvRepo<>)).To(typeof(CsvRepo<>));
  271.  
  272.  
  273. Bind(typeof(IOracleRepo<>)).To(typeof(OracleRepo<>));
  274. //Bind(typeof(IOracleRepo<>)).To(typeof(OracleRepo333<>));
  275. }
  276. }
  277.  
  278.  
  279. public interface IGeneric
  280. {
  281.  
  282. }
  283.  
  284. public interface IEntity : IGeneric
  285. {
  286. }
  287.  
  288. public interface IUserEntity : IEntity
  289. {
  290.  
  291. }
  292.  
  293. public interface IProductEntity : IEntity
  294. {
  295.  
  296. }
  297.  
  298. public interface IReturnType : IGeneric
  299. {
  300. }
  301.  
  302. public interface IReturnTypeAbc : IReturnType
  303. {
  304. int A { get; set; }
  305. int B { get; set; }
  306. int C { get; set; }
  307. }
  308.  
  309. public interface IReturnTypeXyz : IReturnType
  310. {
  311. int X { get; set; }
  312. int Y { get; set; }
  313. int Z { get; set; }
  314. }
  315.  
  316. public class ReturnTypeAbc : IReturnTypeAbc
  317. {
  318. public int A { get; set; }
  319. public int B { get; set; }
  320. public int C { get; set; }
  321. }
  322.  
  323. public class ReturnTypeXyz : IReturnTypeXyz
  324. {
  325. public int X { get; set; }
  326. public int Y { get; set; }
  327. public int Z { get; set; }
  328. }
  329.  
  330. UserService
  331. ProductService
  332.  
  333. public class DbManager : IDbManager
  334. {
  335. private readonly DatabaseHelper _database;
  336.  
  337. public DbManager(string connectionStringName)
  338. {
  339. _database = new DatabaseHelper(connectionStringName);
  340. }
  341.  
  342. public IDbConnection GetDatabasecOnnection()
  343. {
  344. return _database.GetConnection();
  345. }
  346.  
  347. public void CloseConnection(IDbConnection connection)
  348. {
  349. _database.CloseConnection(connection);
  350. }
  351.  
  352. public IDbDataParameter CreateParameter(string name, object value, DbType dbType)
  353. {
  354. return _database.GetParameter(name, value, dbType, ParameterDirection.Input);
  355. }
  356.  
  357. public IDbDataParameter CreateParameter(string name, int size, object value, DbType dbType)
  358. {
  359. return _database.GetParameter(name, value, dbType, size, ParameterDirection.Input);
  360. }
  361.  
  362. public IDbDataParameter CreateParameter(string name, int size, object value, DbType dbType, ParameterDirection direction)
  363. {
  364. return _database.GetParameter(name, value, dbType, size, direction);
  365. }
  366.  
  367. public DataTable GetDataTable(string commandText, CommandType commandType, IDbDataParameter[] parameters = null)
  368. {
  369. using (var connection = _database.GetConnection())
  370. {
  371. using (var command = _database.GetCommand(commandText, connection, commandType))
  372. {
  373. if (parameters != null)
  374. {
  375. foreach (var parameter in parameters)
  376. {
  377. command.Parameters.Add(parameter);
  378. }
  379. }
  380.  
  381. var dataset = new DataSet();
  382. var dataAdaper = _database.GetDataAdapter(command);
  383. dataAdaper.Fill(dataset);
  384.  
  385. return dataset.Tables[0];
  386. }
  387. }
  388. }
  389. //other database methods ...
  390. }
  391.  
  392. IDbManager dbManager = new DbManager("mysql");
  393.  
  394. var user = new User
  395. {
  396. FirstName = "First",
  397. LastName = "Last",
  398. Dob = DateTime.Now.AddDays(-3000),
  399. IsActive = true
  400. };
  401.  
  402. var parameters = new List<IDbDataParameter>
  403. {
  404. dbManager.CreateParameter("@FirstName", 50, user.FirstName, DbType.String),
  405. dbManager.CreateParameter("@LastName", user.LastName, DbType.String),
  406. dbManager.CreateParameter("@Dob", user.Dob, DbType.DateTime),
  407. dbManager.CreateParameter("@IsActive", 50, user.IsActive, DbType.Boolean)
  408. };
  409.  
  410. long lastId;
  411.  
  412.  
  413. dbManager.Insert("DAH_User_Insert", CommandType.StoredProcedure, parameters.ToArray(), out lastId);
  414. Console.WriteLine("nINSERTED ID: " + lastId);
  415.  
  416. //DATATABLE
  417. dataTable = dbManager.GetDataTable("DAH_User_GetAll", CommandType.StoredProcedure);
  418. Console.WriteLine(
  419. $"nUPADTED VALUES FirstName: {dataTable.Rows[0]["FirstName"]} LastName: {dataTable.Rows[0]["LastName"]}");
Add Comment
Please, Sign In to add comment