Roc*_*ngh 6 .net c# java oop design-patterns
我们可以使用这两种方法将数据发送到数据访问层或任何其他来源:
方法1:存储库方式:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
public class UserRepository
{
public static void Add(User user)
{
// Add user logic
}
public static void Delete(User user)
{
// Delete user logic
}
public static User Get(int userid)
{
// Get user logic
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var user = new User
{
FirstName = "FirstName",
LastName = "LastName",
Age = 20
};
UserRepository.Add(user);
Run Code Online (Sandbox Code Playgroud)
上面,您已经看到我保持User类简单.它没有任何行为.行为被添加到单独的UserRepository类中.
第二种方法:仅在User.cs中保留添加/删除/获取等:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public void Add()
{
// Add user logic
}
public void Delete()
{
// Delete user logic
}
public User Get()
{
// Get user logic
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var user = new User
{
FirstName = "FirstName",
LastName = "LastName",
Age = 20
};
user.Add();
Run Code Online (Sandbox Code Playgroud)
上面我只保留了User.cs中的行为.这两种方法都用于添加,删除等用户.你能让我知道吗
哪种方法更好?
何时决定我们必须选择上述两种方法中的哪一种?
如果我必须添加其他方法,如FindAllUsers, FindUserByUserId,DeleteUserByUserId我应该采用哪种方法?
bst*_*ack 11
第一种方法要好得多,因为您将关注点即域实体User和持久性分离到数据库.
领域驱动设计中经常谈到的最重要的事情之一就是"持久性无知".看看持久性无知有什么好处?
通过使用存储库模式,您保存/获取实体的方式不受实体代码的限制,即您的域保持清洁,实质上是实现持久性无知(或者无论如何都要走很长的路)
所以答案: