我知道已经有很多关于n层设计的帖子了,这可能是我过度思考并陷入死结,但现在我自己都感到困惑了,希望从社区中获得一些明确的答案。我试图将我创建的项目(最初没有进行良好的架构设计)分成不同的层(每个层都在自己的项目中):
UI
Business Objects
Logic / Business
DAL
UI应该只调用逻辑层来获取它的内容
业务对象不应调用或引用任何其他东西,只是存储数据的一种方式
逻辑/业务层应该包含系统中获取、创建、更新、删除(CRUD)对象的所有方法,并且会引用BO和DAL。它会将业务逻辑应用于操作,然后将实际的CRUD委托给DAL。
DAL只需对数据库执行CRUD操作。它将引用BO,因为它将返回它们以供获取等操作使用。
我的问题是逻辑类是否只应调用其相应的DAL类,而仅调用逻辑类?换句话说,CompanyLogic类只应调用CompanyDAL类。因此,如果它想通过ID获取客户端对象,它将调用ClientLogic.GetClientByID(int)而不是ClientDAL.GetClientByID(int)。
我认为它应该保持在自己的层中的原因是:
它似乎会减少项目之间的耦合
如果逻辑中获取客户端对象时有一些逻辑验证(可能不是最好的例子,但希望能传达出点),那么怎么办?
编辑:
我不确定这是否是我的设计不好,但目前业务层有许多类,包括ClientBULL和CompnayBULL,两个类互相调用。我为每个类使用一个接口,并有一个工厂来构建对象,以尽量减少耦合,但由于在两个类中调用方法,它们现在无法独立存在。这是一个坏主意吗?
UI
Business Objects
Logic / Business
DAL
UI应该只调用逻辑层来获取它的内容
业务对象不应调用或引用任何其他东西,只是存储数据的一种方式
逻辑/业务层应该包含系统中获取、创建、更新、删除(CRUD)对象的所有方法,并且会引用BO和DAL。它会将业务逻辑应用于操作,然后将实际的CRUD委托给DAL。
DAL只需对数据库执行CRUD操作。它将引用BO,因为它将返回它们以供获取等操作使用。
我的问题是逻辑类是否只应调用其相应的DAL类,而仅调用逻辑类?换句话说,CompanyLogic类只应调用CompanyDAL类。因此,如果它想通过ID获取客户端对象,它将调用ClientLogic.GetClientByID(int)而不是ClientDAL.GetClientByID(int)。
我认为它应该保持在自己的层中的原因是:
它似乎会减少项目之间的耦合
如果逻辑中获取客户端对象时有一些逻辑验证(可能不是最好的例子,但希望能传达出点),那么怎么办?
编辑:
我不确定这是否是我的设计不好,但目前业务层有许多类,包括ClientBULL和CompnayBULL,两个类互相调用。我为每个类使用一个接口,并有一个工厂来构建对象,以尽量减少耦合,但由于在两个类中调用方法,它们现在无法独立存在。这是一个坏主意吗?