2011-09-13 266 views
0

我在我的解决方案中使用FluentNHibernate。从fluentnhibernate文档中推荐的文件夹结构如下所示:如何构建3层解决方案?

实体文件夹,我们在其中拥有业务模型的POCO类。 Mappings文件夹,在其下我们有映射到我们的数据模型。

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

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

也许创建一个名为“数据访问”另一个项目,引用商业模式项目的数据访问层做CRUD?

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


AK:我在n-layered architecture - BLL, DAL and interfaces. What is best practice?上看过你的文章。

让我给你

以“人”为例:考虑不同的数据有一个人(获得的所有数据单个 人,浅浅的数据的集合相关 操作对于许多人来说,CRUD 操作,搜索等) - 然后沿着逻辑分组设计界面。

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

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

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

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

    这听起来对你正确吗?谢谢。

回答

1

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

高层

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

你的具体细节内常见

  • 制作商业模式(可能作为一个独立的项目)。
  • 映射我猜是依赖于物理数据源,所以应该进入具体的DA实现。

其他注意事项

  • 最佳/常见的做法是松散耦合我们的主要块(尤其是BL和DA);通常使用依赖注入。
  • 这将通过定义Inferfaces来实现,并且这些接口将会/可以使用来自Common的POCO或BusinessModel实体。
+0

谢谢,这很有帮助。我是否在所有层或仅在DA层定义接口?指向任何好文章?我知道我可以谷歌,但我相信我会挖出一大堆,不知道哪一个能帮助我最好。 – Stack0verflow

1

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

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

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

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

+0

谢谢,MA。这很好。我有点想法。假设我有一个小型解决方案,每层只有一个项目,那么在业务模型中,我拥有POCO和存储库接口。那么,在DAL中,具体的存储库类实际上是否实现了业务层中定义的存储库接口?你能确认吗?我认为这将帮助我在正确的方向上组织我的解决方案结构。再次感谢你。 – Stack0verflow

+0

是的,你正确的做法是,在业务模型中使用POCO和存储库接口,并且在实现接口的dal项目中有具体的存储库具体类。 你也可以找到很多实现这种架构的DDD示例..查看我一直在开发的这个解决方案,它稍微复杂一点,但它会给你一个想法http://sellandbuy.codeplex.com/ –