我们可以使用这两种方法将数据发送到数据访问层或任何其他来源:
方法 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
}
}
用法:
var user = new User
{
FirstName = "FirstName",
LastName = "LastName",
Age = 20
};
UserRepository.Add(user);
在上面,您已经看到我使 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
}
}
用法:
var user = new User
{
FirstName = "FirstName",
LastName = "LastName",
Age = 20
};
user.Add();
以上我只在 User.cs 中保留了行为。这两种方法都用于添加、删除用户等目的。可以告诉我吗
哪种方法更好?
何时决定我们必须选择上述两种方法中的哪一种?
如果我还必须添加其他方法,例如 FindAllUsers, FindUserByUserId、DeleteUserByUserId 我应该采用哪种方法?
最佳答案
第一种方法要好得多,因为您正在分离关注点,即域实体用户和数据库的持久性。
领域驱动设计中经常谈论的最重要的事情之一是“持久性无知”参见What are the benefits of Persistence Ignorance?
通过使用存储库模式,您保存/获取您的实体的方式被排除在实体代码之外,即您的域保持它的清洁并在本质上实现持久性无知(或者无论如何要走很长一段路)
所以答案:
- 存储库方法要好得多
- 始终选择选项 1
- 将这些方法添加到存储库类
关于c# - 存储库模式与 DTO 模式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12157678/