经过大量的关于Repository和Data Mapper的阅读之后,我决定在一个testing项目中实现这些模式。 由于我是新手,所以我想就如何在一个简单的项目中实现这些观点获得您的观点。 杰里米·米勒说: 做一些不重要的个人编码项目,你可以自由地尝试devise模式。 但是我不知道我做的所有事情是否正确。 这是我的项目结构: 正如你可以看到有很多文件夹,我将在下面详细描述它们。 域:项目域实体去这里我有一个简单的Personnel类inheritance自EntityBase类,EntityBase类有一个名为Id的单一属性。 public int Id { get; set; } Infrustructure:这是一个简单的数据访问层,有两个类。 SqlDataLayer是一个从名为DataLayer的抽象类inheritance的简单类。 在这里我提供了一些如下代码的function: public SQLDataLayer() { const string connString = "ConnectionString goes here"; _connection = new SqlConnection(connString); _command = _connection.CreateCommand(); } 给参数集合添加参数: public override void AddParameter(string key, string value) { var parameter = _command.CreateParameter(); parameter.Value = value; parameter.ParameterName = […]
我正试图刷新我的devise模式技能,我很好奇这些模式之间有什么区别? 他们看起来都是一样的东西 – 封装特定实体的数据库逻辑,所以调用的代码不知道底层的持久层。 从我简短的研究中,他们通常都会实现您的标准CRUD方法,并将数据库特定的细节抽象出来。 除了命名约定(例如,CustomerMapper与CustomerDAO与CustomerGateway与CustomerRepository),有什么区别? 如果有区别,你什么时候select一个呢? 在过去,我会写代码类似于以下(简化,自然 – 我通常不会使用公共属性): public class Customer { public long ID; public string FirstName; public string LastName; public string CompanyName; } public interface ICustomerGateway { IList<Customer> GetAll(); Customer GetCustomerByID(long id); bool AddNewCustomer(Customer customer); bool UpdateCustomer(Customer customer); bool DeleteCustomer(long id); } 并有一个CustomerGateway类来实现所有方法的特定数据库逻辑。 有时我不会使用一个接口,并使CustomerGateway上的所有方法都是静态的(我知道,我知道这使得它更lesstesting),所以我可以这样调用它: Customer cust = CustomerGateway.GetCustomerByID(42); 这似乎是数据映射器和存储库模式的相同原理; DAO模式(与Gateway相同,我认为?)似乎也鼓励数据库特定的网关。 我错过了什么吗? […]