我想构建我的setMinimumBackgroundFetchInterval:
应用程序,如下所示:
application:
didFinishLaunchingWithOptions:
现在我的原始解决方案如下:
只有两个类库:
asp.net web form
所在的1-DB
2-Data Access Layer(Using ORM[EF])
3-Repository/Unit Of Work (Pattern)
4-Business Layer
5-Service Layer
6-UI
。DAL (Data Access Layer)
(自动生成)及其等效的部分类。我对此设计的疑问:
EF
放在新图层中,还是只放在域类图层中,其中每个商家都属于相关的域类或放置我的业务我的网页背后的代码中的逻辑?Domain Classes
,business logic
,POCO
)?答案 0 :(得分:3)
我应该将业务逻辑放在新层中,还是只放在每个业务属于相关域类的域类层中?或者将我的业务逻辑放在我的网页后面的代码中?
因此,您可能拥有一个OrderService
类,该类位于服务层中,该类具有方法PlaceOrder
,并驱动进程检查{{}的状态1}} class(业务对象),将Customer
(业务类)保存到数据存储(可能通过存储库层),并为客户排队电子邮件确认。 (可能通过另一个服务)
(请注意,这是一个非常简单的示例,并不一定声称是您特定方案的最佳流程)
有人可以澄清设计视角(POCO,Domain Class,BusinessClass)中这些术语之间的区别吗?
POCO 表示"普通旧CLR对象"它基本上是指一个类的实例,它不依赖于属性形式的任何外部框架或来自所述框架的继承。
通过使用EF Code First,您可以避免这种情况,并在代码中使用纯POCO。
POCO 和 DTO 经常混为一谈;它们完全不一样!
我还想指出与您提出的设计相关的其他一些事情。
Order
已经为您封装了一个工作单元模式。DbContext
模式方式更灵活。使用EF Code First和拥抱DbContext将获得的好处包括 -True POCO域/业务对象(您可以在单独的程序集中声明您的BO,以便他们享受持久性无知,但也可以在另一个程序集(例如您的数据访问层)中单独映射EF - 在图层之间不做无意义映射的简化代码库
**我刚刚意识到我的所有参考文献都是针对同一个人的作品。我发誓,他没有付钱让我这样做。)
根据OP对循环依赖感知问题的评论,这里是一个特定场景的示例代码(用例有点不起作用,只是说明性的)
.edmx
现在,上述观点是public class EmployeeNameService
{
readonly IEmployeeRepository _repo;
public EmployeeNameService(IEmployeeRepsitory repo)
{
_repo=repo;
}
public string GetEmployeeName(int empID)
{
var emp = _repo.GetByID(empID);
var name = emp.GetEmployeeName();//does some crazy logic based on the Employee state or whatever.
return name;
}
}
驻留在服务"层"它具有对存储库层和域对象"层"的依赖性(引用)。 (它实际上不是一个图层,只是一个包含Domain / Business类的单独项目)。所以不用担心循环依赖。
当然,Repository会引用Domain Objects,这很好,因为它是单向依赖。
我以前没有提到的一件事是不遵循上述建议;如果您有一个非常简单的CRUD模型,您可以通过该模型获取用户输入并将其传递给数据存储,而无需任何"业务逻辑"介于两者之间,然后坚持原计划的简单层。但是,只要存在任何业务逻辑 ,就考虑使用上述概念。