我意识到已经有很多关于 n 层设计的帖子,这可能是我在思考问题和绕圈子,但我现在自己都感到困惑,希望从社区中得到一些澄清。
我正在尝试将我创建的项目(并且从一开始就没有很好地设计架构)分成不同的层(每个层都在他们自己的项目中):
- 用户界面
- 业务对象
- 逻辑/业务
- 达尔
UI应该只调用逻辑层来获取它的东西
业务对象不应调用或引用其他任何东西,只是存储数据的一种方式
逻辑/业务层应该包含系统中获取、创建、更新、删除 (CRUD) 对象的所有方法,并且可以引用 BO 和 DAL 。它将业务逻辑应用于操作,然后将实际的 CRUD 委托给 DAL。
DAL只会在数据库上执行 CRUD 操作。它将引用 BO,因为它会为 Gets 等返回它们。
我的问题是逻辑类是否应该只调用其等效的 DAL 类而只调用逻辑类?换句话说,CompanyLogic
类应该只调用CompanyDAL
类。因此,如果它想通过 ID 获取 Client 对象,它将调用ClientLogic.GetClientByID(int)
而不是ClientDAL.GetClientByID(int)
.
我认为它可能应该留在自己的层的原因是:
这似乎会放松项目之间的耦合
逻辑呢,如果获取客户端对象中有一些逻辑验证(可能不是最好的例子,但希望它能够理解这一点)。
编辑:
我不确定这是否是我的糟糕设计,但目前业务层有许多类,包括 ClientBULL 和 CompnayBULL,这两个类相互调用。我为每个类使用一个接口,并有一个工厂来构建对象以尝试减少任何耦合,但由于在两个类中调用方法,它们现在不能没有彼此而存在。这是一个坏主意吗?