C# 如何在不设计航天器的情况下正确分离我的体系结构中的关注点?

C# 如何在不设计航天器的情况下正确分离我的体系结构中的关注点?,c#,design-patterns,architecture,domain-driven-design,C#,Design Patterns,Architecture,Domain Driven Design,在年,我发布了一些关于如何实现关注点分离的示例代码。我收到了一些不错的建议,但我仍然不“明白”,也不知道如何设计我的应用程序,以便在不设计下一个航天飞机的情况下,正确地分离关注点 我正在工作的网站(慢慢地从旧的ASP一节一节地转换)规模适中,有几个不同的部分,包括一个商店(每天约有100个订单),并且获得了相当可观的流量(每月约30万个Unique)。我是主要开发人员,可能最多有2-3个开发人员也会在系统上工作 考虑到这一点,我不确定我是否需要完整的企业级体系结构(如果我错了,请纠正我),但由于

在年,我发布了一些关于如何实现关注点分离的示例代码。我收到了一些不错的建议,但我仍然不“明白”,也不知道如何设计我的应用程序,以便在不设计下一个航天飞机的情况下,正确地分离关注点

我正在工作的网站(慢慢地从旧的ASP一节一节地转换)规模适中,有几个不同的部分,包括一个商店(每天约有100个订单),并且获得了相当可观的流量(每月约30万个Unique)。我是主要开发人员,可能最多有2-3个开发人员也会在系统上工作

考虑到这一点,我不确定我是否需要完整的企业级体系结构(如果我错了,请纠正我),但由于我将在未来几年内处理此代码,因此我希望它能够很好地执行,并且能够根据需要方便地扩展。我正在学习C#,并试图从一开始就融入最佳实践。旧的ASP网站一团糟,这次我想避免这种情况

我目前尝试这样做的结果是一堆DTO,这些DTO具有验证和调用DAL层以保持的服务。这不是故意的,但我认为现在的设置方式是一个完美的贫血领域模型。我一直试图通过将我的BLL转换为域对象并仅使用DTO在DAL和BO之间传输数据来解决这个问题,但它根本不起作用。我还根据数据库表/功能对所有DTO/BLL进行了拆分(例如,YouTube风格的应用程序-我对片段、视频、文件、评论等有单独的DTO/BLL/DAL)


从我所阅读的内容来看,我至少需要使用存储库,可能还需要使用接口。这很好,但我不确定如何前进。请帮忙 今天有更多这样的套餐可供选择。因此,尽管构建原始站点的决定可能是正确的,但构建自定义应用程序可能不再是正确的决定

这里列出了几种电子商务平台:


<

它要比2-3个开发者的工资低很多。

< P>如果你正在重写你的电子商务站点,你至少应该考虑用标准的包替换它。

今天有更多这样的套餐可供选择。因此,尽管构建原始站点的决定可能是正确的,但构建自定义应用程序可能不再是正确的决定

这里列出了几种电子商务平台:


它的成本应该比2-3个开发者的工资低很多。

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

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

让我们先处理高级绒毛。这取决于您所说的“完整企业级体系结构”是什么意思,但简短的回答是“是”,您需要解决系统的许多方面(这将取决于系统的上下文以及主要方面是什么)。如果没有其他因素,关键因素将是变化可支持性。您需要以一种支持将来更改的方式构造应用程序(关注点的逻辑和物理分离(依赖项注入对后者非常有用);模块化设计,等等)

(2)“如何在不设计航天器的情况下正确分离我的体系结构中的关注点?”

我喜欢(这是我写的一篇文章,总结了我学到的所有东西),但要点如下:

看看这个,你会有至少六个组件-这不是很大。如果你能把你的系统分解成(独立的关注点)这些大的桶,那么它将大大有助于满足你的需求

(3)细节

将关注点分为不同的层和类是很好的,但是如果您想有效地处理变化,您需要进一步。(DI)是此处使用的关键工具。当我学习DI时,它是一件手工制作的事情(如前一个链接所示),但是现在有很多框架(等等)。如果您是DI新手(并且您在.Net中工作),本文将逐步介绍基本知识

(4)如何前进

使用DI获得一个简单的垂直切片(从UI一直到DB),等等。这样做的同时,您还将构建系统将使用的框架(子系统和主要管道)的骨架

在第二片上开始工作;在这一点上,你应该发现任何你无意中没有重用你应该做的东西的地方——在你构建第3、4和5部分之前,是时候改变这些地方了——在有太多的返工之前

评论更新:

你认为我应该完全 放弃web表单并从 抓挠还是仅仅用我知道的东西 现在

我不知道,但要让答案是“是”,你需要能够用“是”回答以下问题:

  • 我们具备使用和支持MVC所需的技能和经验
  • 我们有时间做出改变(做出改变显然有好处)
  • 我们知道MVC更适合我们的需要
  • 进行此更改不会使成功交付面临风险
…我是否需要转移到项目和 将这些层中的每一层设置为 单独的项目

对。项目与程序集1对1映射,因此要获得松耦合的好处,您肯定会希望以这种方式分离项目,并且要注意如何设置引用

当您提到POCO时,您是指DTO还是富域对象

DTO不是富域对象。但是