如何构建一个三层解决方案?

时间:2011-09-13 20:26:12

标签: architecture 3-tier

我在我的解决方案中使用FluentNHibernate。来自fluentnhibernate文档的推荐文件夹结构如下:

实体文件夹,我们在其下有商业模式的POCO类。 Mappings文件夹,我们在其下面有我们的数据模型的映射。

我假设这两个文件夹会进入名为“BusinessModel”的业务层项目?见下文:

BuessinessModel
    |_ Entities
          |- Student.cs
          |- Course.cs
          |- Faculty.cs
    |_ Mappings
          |- Mappings.cs

也许创建另一个名为“DataAccess”的项目,该项目引用数据访问层的BusinessModel项目来执行CRUD?

最佳做法是什么?有建筑师吗?感谢。


AK:我在n-layered architecture - BLL, DAL and interfaces. What is best practice?看了你的帖子。

让我引用你的话

  

以“人”为例:考虑不同的数据   与人相关的操作(获取单个人的所有数据)   人,许多人的浅层数据集合,CRUD   操作,搜索等) - 然后沿逻辑设计接口   分组。

我想了解这一点。所以,你说的是

  1. 在BLL项目中,我们有这个Person类。

  2. 同样在BLL项目中,我们有一个声明所有数据的接口 我们将需要Person对象的操作方法。

  3. 然后在DAL项目中,我们具体实现了 我们在BLL中定义的接口。

    这听起来对你不对吗?感谢。

2 个答案:

答案 0 :(得分:1)

虽然盲目地将相同的架构应用于每个解决方案/项目是危险的;我的标准/默认方法是这样的:

高级

  • 我们的目标是3层,我们假设它们是:UI,BL(业务逻辑),DA(数据访问)。
  • 那将(可能)由以下4个逻辑组块(思想名称空间)组成:Common,UI,BL,DA。请记住,这4个块中的每个块可能都有多个代码级项目。
  • 常见的是我们会坚持其他3个需要分享的东西 - 比如POCO。

您的具体信息

  • 在Common。中创建BusinessModel(可能作为独立项目)。
  • 映射我猜测依赖于物理数据源,因此应该进入具体的DA实现。

其他笔记

  • 最好/通常的做法是松散地耦合我们的主要部分(特别是BL和DA);通常使用依赖注入。
  • 这将通过定义Inferfaces来实现,这些接口将/可以使用POCO或您的BusinessModel实体 - 来自Common。

答案 1 :(得分:1)

您需要将具体数据访问与业务层分开,最好是使用实体(域模型)和存储库接口创建业务层。

然后创建数据访问的具体实现,其中包括使用fluentnhibernate进行数据访问的映射和具体存储库。

Buessiness     | _实体           | - Student.cs           | - Course.cs           | - Faculty.cs     | _ RepositoryInterfaces           | - IStudentRepository.cs           | - ICourseRepository.cs

DAL(混凝土 - 使用FluentNHibernate)     | _映射           | - Mappings.cs     | _存储库           | - StudentRepository.cs           | - CourseRepository.cs