如何在不设计航天器的情况下正确分离我的架构中的问题?

时间:2011-03-21 15:56:32

标签: c# design-patterns architecture domain-driven-design

my last question中,我发布了一些示例代码,说明我是如何尝试实现关注点分离的。我收到了一些好的建议,但我仍然没有“得到它”,并且无法弄清楚如何设计我的应用程序以正确分离关注点,而无需设计下一个航天飞机。

我正在处理的网站(从旧的ASP逐段转换)是适度大小的,有几个不同的部分,包括一个商店(每天约100个订单)并获得相当大的流量(约300k唯一/月) )。我是主要开发人员,最多可能有2-3个开发人员也可以使用该系统。

考虑到这一点,我不确定我是否需要完整的企业级架构(如果我错了,请纠正我),但是因为我将在接下来的几年里研究这个代码,所以我希望它能够很好地运行根据需要轻松扩展。我正在学习C#并尝试从一开始就融入最佳实践。旧的ASP网站是一个意大利面条混乱,这次我想避免这种情况。

我目前的做法最终成为了一堆DTO,其服务验证并调用DAL层来保持。这不是故意的,但我认为它现在的设置方式是一个完美的贫血领域模型。我一直试图通过将我的BLL转换为域对象并仅使用DTO在DAL和BO之间传输数据来解决这个问题,但它只是无法正常工作。我还根据数据库表格/功能将所有dtos / bll分开(例如 - YouTube风格的应用程序 - 我有分段,视频,文件,评论等单独的DTO / BLL / DAL)。

从我读过的内容来看,我至少需要使用存储库和接口。这很好,但我不确定如何前进。请帮忙!

2 个答案:

答案 0 :(得分:3)

从我所看到的,你有四点需要解决:

(1)“考虑到这一点,我不确定我是否需要完整的企业级架构”

让我们先处理高级别的绒毛。这取决于你对“完整的企业级架构”的意思,但简短的回答是“是”你需要解决系统的许多方面(并且它将取决于系统的上下文,主要是什么) 。如果不出意外,关键是更改支持性。您需要以支持未来变化的方式构建应用程序(关注点的逻辑和物理分离(依赖注入对后者非常有用);模块化设计等)。

(2)“如何在不设计航天器的情况下正确分离我的架构中的问题?”

我喜欢this approach(这是我写的一篇文章,它提炼了我到目前为止所学到的一切) - 但这里是要点: enter image description here

看着这个你将至少有六个装配 - 这并不是很大。如果您可以将系统(单独的问题)分解为这些大型存储桶,那么它应该可以帮助您满足需求。

(3)明细

将问题分成不同的层和类是很好的,但如果您希望能够有效地处理变更,则需要更进一步。 Dependency Inversion(DI)是这里使用的关键工具。当我学习DI时,它是一个手工滚动的事件(如前面的链接所示),但现在有很多框架(等)。如果您是DI的新手(并且您在.Net工作),那么本文将指导您完成基础知识。

(4)如何前进

获取一个简单的垂直切片(UI一直到数据库)使用DI等工作。当你这样做时,你还将构建框架(子系统和主要管道)的骨骼,你的系统将使用

在第二片上开始工作了;在这一点上,你应该发现你无意中没有重复使用的任何地方 - 这是你在构建切片3,4和5之前改变它们的时间 - 在返工过多之前。

评论更新:

  你觉得我应该完全吗?   删除Web表单并从中获取MVC   划伤或只是我所知道的   现在?

我不知道,但是对于'是'的答案,你需要能够用'是'回答以下问题:

  • 我们拥有使用和支持MVC所需的技能和经验。
  • 我们有时间进行更改(进行此更改有明显的好处)。
  • 我们知道MVC更适合我们的需求。
  • 进行此更改并不会使成功交付处于危险之中。
  

......我是否需要转移到项目和   将每个层设置为   单独的项目?

是。项目使用程序集进行1对1映射,因此获得松散耦合的好处,您肯定希望以这种方式分离事物,并且要小心如何设置引用。

  
    

当您引用POCO时,您只是意味着DTO或富域对象吗?

  

DTO Rich Domain对象。但是,当严格来说,如果你不是马丁福勒的思想学派,人们似乎可以互换地使用POCO和DTO这两个术语。在他看来,DTO将是一堆POCO(或其他对象(?)),它们一起发送“通过线路”,这样你只能拨打一个外部系统,而不是拨打大量电话。

  

每个人都说我不应该暴露我的   数据结构到我的UI,但我说   为什么不呢?

管理依赖项。你不想要的是你的UI引用物理数据结构,因为只要它改变(并且它会),你将(使用技术术语)搞砸了。这是分层的重点。你想要做的是拥有UI depend on abstractions - 而不是实现。在5层体系结构中,POCO可以安全地用于此,因为它们是“某些事物”(商业概念)的抽象/逻辑定义,因此它们只应在有商业原因时才会改变 - 所以从这个意义上说是fairly stable and safer to depend on

答案 1 :(得分:2)

如果您正在重写电子商务网站,至少应考虑将其替换为标准套餐。

今天还有更多这样的套餐。因此,虽然构建原始网站的决定可能是正确的,但构建自定义应用程序可能不再是正确的决定。

此处列出了几个电子商务平台:Good e-commerce platform for Java or .NET

它应该比2-3名开发人员的工资低得多。