(我要问 2 个问题)。
我们使用 3 层:BL、Dal、UI。
我们不想为所有对象构建一个大的BL
、DAL
。
因此,我们为代理
和潜在客户
创建了这个结构。
现在假设我应该编写一个方法:
public Agent GetAgentByLead(Lead leadObj)
{
}
问题#1
此函数应驻留在哪里:AgentsBL
或 LeadsBL
?
问题#2
假设我想使用 Entity Framework 。
查询可以是:
var activeAgents= context.Agents.Where(c => c.ACTIVE).ToList();
此行可以在 myPage.aspx.cs
文件中执行。
那么这里的层在哪里?上下文将驻留在哪里?
我只是不明白 EF 如何处理层(就像我的第一个问题)
请问有什么帮助吗?
最佳答案
此类事情的常用模式是 Repository Pattern ,如果你用谷歌搜索,你会发现大量信息,这个想法是你基本上创建一个封装上下文的存储库,这样你就永远不会直接使用它......
我更喜欢通用存储库,它们具有常见的 CRUD 方法,但也具有以下内容:
IEnumerable<T> FindAll(IQuery<T> query);
因此,不必为每种对象类型创建一个唯一的存储库来执行特定查询,例如您的 GetAgentByLead ,您可以将该逻辑包装到查询中并传递上下文,这样您的查询、存储库和 Controller (假设 MVC)都是独立的并且不相互依赖。
示例查询对象类似于:
public interface IQuery<T>
{
IEnumerable<T> Execute(IContext context);
}
public class FindAllUsersInGroupQuery : IQuery<User>
{
public int GroupId {get; set;}
IEnumerable<User> Execute(IContext context)
{
return context.DoSomeQueryForGettingUsers(GroupId);
}
}
这样,您就可以模拟您的查询、存储库并测试您的 Controller (如果您愿意),而且您最终也不会得到难以维护的巨大数据访问器类。
关于c# - 层和实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045880/