【问题标题】:n-tier-application, what goes where and assembly namesn-tier-application,什么去哪里和程序集名称
【发布时间】:2012-08-14 04:12:22
【问题描述】:

我创建了一个项目,我需要将操作拆分为 n 层应用程序(3 层)

我从一个项目开始,然后开始添加我的所有课程。特效

public IServiceFoo()
{
  DoIt();
}

public ServiceFoo : IServiceFoo
{
  ...
}

添加了 IoC 和所有这些。 开始重构,但碰壁了。 我有 4 个程序集。

  1. 型号/领域
  2. 服务/基础设施
  3. DAL
  4. ASP.NET MVC 作为视图。

我在哪里粘贴我的 IServiceFoo 接口? 唯一合乎逻辑的位置是在域/模型程序集中,因为所有其他项目都知道这一点,因此可以跨应用程序使用。

我是否将我的程序集称为:Domain instad of Model,因为它不再只是模型?

服务也是如此?这更像是一个基础设施,因为它包含服务类和计算逻辑。

希望你能帮忙? 谢谢。

--编辑-08142012-- 我的解决方案领域:商店,提供教育和更好的建筑知识。

Solution (a 3 layers application :D then!)
  DAL - assembly (only pulls data up and save data)
    - ProductDAL : IProductDal
    - GroupDAL : IGroupDAL
    - UserDAL : IUserDAL

  Service - assembly
    - ProductService : IProductService (calculate products, load product by DAL)
    - GroupService : IGroupService (do some stuff with group, maybe delete group in list with no product)
    - UserService : IUserService (validate if a user can login, load user by dal, check password)
  Models - assembly
    - Product
    - Group
    - User
- Webshop - assembly (ASP.NET MVC) (with all the viewmodel and models, UI Helpers)
          Using DI/IoC as the glue, that sticks it all to getter.

另外:网上商店引用所有程序集。除了接口之外,服务层和 dal 层都知道对方的注意事项。

我的 Service 和 DAL 接口的最佳位置在哪里? 希望这会有所帮助:S

【问题讨论】:

  • 使其成为n+1 层应用程序
  • 层与层不同。层分布在多台计算机或进程中。层在一个进程中。
  • IServiceFoo 和 ServiceFoo 是干什么用的?如果我们不知道它的用途和用途,我们就无法真正告诉您它的去向。
  • 这个问题可能不适合 StackOverflow 的技术问答形式。具体来说,这个问题没有“正确”的答案。它可能会在programmers.stackexchange.com 找到更好的归宿,这种更普遍的问题会很受欢迎。
  • k,也许吧。是否可以移动此线程。还是我需要在正确的线程上创建一个新问题?

标签: .net architecture


【解决方案1】:

分层规则是依赖关系以一种方式进行,一层只能连接到另外两个层(上层和下层)。一旦定义了程序集所在的层,您必须确保它们在项目中的引用方式符合该规则。较低层不能“引用”较高层。如果您违反了这些规则,那么您的类型不在正确的程序集中。

在此图中,BL“连接”到另外两个层,即上层 (UI) 和下层 (DA)。箭头表示 UI 引用了 BL,但 BL 没有引用 UI 层。 BL 和 DA 一样,BL 对 DA 进行引用,但 DA 不对 BL 进行引用。

【讨论】:

  • 我想你可能在那里自相矛盾。 “依赖是单向的”和“一层只能连接到另外两层(上面和下面)”似乎矛盾..
  • 低层只能对高层有依赖,高层只能被低层使用。这是与其他两个层的“连接”,而不是“依赖”。
  • 再一次,我觉得你的解释令人困惑.. 我不是说我认为你错了.. 我只是说我不明白你的解释:)
  • 啊啊啊。我现在明白你所说的“连接”的意思(感谢图表):)
  • 如果您拥有 Visual Studio Premium 或 Ultimate(2010 或更高版本);您可以创建一个层图来定义哪些程序集(或命名空间/类,我相信)在哪一层。然后,该图可以“验证”层内的项目是否具有正确的依赖关系。例如msdn.microsoft.com/en-us/library/dd409395(v=vs.100).aspx
猜你喜欢
  • 2011-03-30
  • 1970-01-01
  • 2012-09-23
  • 2010-10-03
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2021-04-03
相关资源
最近更新 更多