Architecture 新项目的架构分析帮助

Architecture 新项目的架构分析帮助,architecture,nosql,domain-driven-design,ravendb,aggregateroot,Architecture,Nosql,Domain Driven Design,Ravendb,Aggregateroot,(我目前不允许嵌入图像) 我真的需要一些帮助,我的课堂模型上面。我很惭愧地说,我是“那些”在大学里学习面向对象、编写考试、取得优异成绩的开发人员之一,但从未着手在我的真实代码中实现这些原则。在开始编码之前,我从未真正坐下来考虑过我的应用程序设计。因此,我的设计和编码技能在单一遗留银行应用程序开发和维护的重压下已经慢慢消亡和停滞。经过多年的努力,我已经决定是时候改变了!我一直在深入研究设计模式、DDD、NoSQL、DI等方面的世界。过去两周对我来说是一段非常紧张的经历,有时我想我几乎被我在大公司和

(我目前不允许嵌入图像)

我真的需要一些帮助,我的课堂模型上面。我很惭愧地说,我是“那些”在大学里学习面向对象、编写考试、取得优异成绩的开发人员之一,但从未着手在我的真实代码中实现这些原则。在开始编码之前,我从未真正坐下来考虑过我的应用程序设计。因此,我的设计和编码技能在单一遗留银行应用程序开发和维护的重压下已经慢慢消亡和停滞。经过多年的努力,我已经决定是时候改变了!我一直在深入研究设计模式、DDD、NoSQL、DI等方面的世界。过去两周对我来说是一段非常紧张的经历,有时我想我几乎被我在大公司和银行工作时错过的大量最佳实践和技术弄得落泪。我简直不敢相信,这么长时间以来,我离尖端技术和优秀的设计方法有多远,突然出现的所有东西都有可能让我陷入编码瘫痪的状态!我根本无法开始编码,因为我觉得我的设计需要更多的调整,或者我需要对某个特定主题进行更多的研究。不过,够了就够了,我需要继续努力,至少对项目进行第一次迭代

不管怎么说,够了,关于我的问题:

我已经开始为我的高尔夫应用程序创建模型。为了在一定程度上坚持DDD,同时也希望使用NoSQL(RavenDB),我着手满足以下要求

  • 我的平台堆栈是Windows/IIS/MVC 3.0/RavenDB
  • 我需要找到我的总根!我已经开始将它们定义为我的系统中唯一能够坚持自身权利的元素。其他所有我认为是集合的“子组件”。请注意,尚未定义任何实际行为
  • 我的聚合根将是在我的RavenDB文档存储中实际保留的唯一类,它们将“按原样”保留。就实现的性能优势而言,拥有大型树状类结构似乎是RavenDB的最佳方案
  • 我觉得不需要存储库层(一直在关注Ayende的一些文章),因为RavendBAPI感觉流畅且非常轻量级。我只需在需要时通过控制器上的自定义操作属性打开和关闭会话。我已经看到,没有存储库层测试可能会很棘手,但我肯定能够简单地模拟一些“内存中”的域对象吗
  • 对数据库的写入将在单独的服务层中进行
  • 有一次我停下来问自己:“我到底要把我的域名行为放在哪里?”。搜索web的普遍共识似乎表明,我应该让我的域(实体)中没有任何行为(业务逻辑),并在我的服务层中处理所有行为。但在阅读了一些Eric Evans之后,我确信我的领域行为应该存在于此。。。在域中
问题 -作为DDD和建筑设计领域的一个真正的noob,我至少在正确的轨道上,还是注定要被毁灭?
-如果您对以上内容有任何想法、忠告、建设性的批评和见解,我们将不胜感激

所以,是的,从短期来看,跳槽不会提高你的生产率,但从长远来看,它可能会帮助你成为一名成熟的开发人员。DDD、NoSQL等的内容太多了,你可以花上几年的时间来学习


如果你想让你的下一个项目取得成功,我的建议是坚持你所知道的,并逐步引入新技术,这样你就可以始终感觉完全掌控,而不是依赖于“最佳实践”必须有人为你提供帮助。

为了对抗对这一切过于学术化和太长时间停留在分析中的做法:首先让它发挥作用。那就把它弄漂亮

将行为尽可能靠近数据。在无法将责任明确分配给类的情况下使用服务(例如,“转账”方法是否应该在SavingsAccount类上?)。服务可以是聚合的一部分

一定要使用存储库(我不同意Ayende)。您提到为DB写入使用单独的服务层。存储库是一个完美的界面,可以将该层放在后面。这也是一个完美的测试接缝

没有仔细查看类图,但您可能在某些地方过度使用了继承。喜欢组合而不是继承。遗传可以很快长出它丑陋的脑袋


在选择聚合根时,一个重要的标准是生命周期。当聚合根死亡时,聚合中的所有其他内容也死亡。聚合根也在控制中,聚合之外的所有内容都通过它。当有疑问时,只需创建很多(单个实体聚合)。对于文档数据库,您通常会为每个聚合存储一个文档,因此这在某种程度上与您选择它们的方式相匹配。存储不同聚合的引用ID。

首先,请允许我祝贺您决定采取措施尝试变得更专业。我对这个行业缺乏专业感到绝望,有时我觉得自己走在80%的牛仔/黑客和20%的专业人士中间

关于你的问题:

  • 你读过沃恩·贝隆的作品吗?如果没有,你应该。它提供了一个优秀的集料设计指南,我认为它的复杂性被低估了
  • 看看你的模型,我不确定你是否真的定义了聚合?我可以看出您已经确定了聚合根,但是聚合应该有明确的边界,并且与其他聚合分开(即,没有引用其他聚合根的实体,让它们引用它们的ID)。属性名引用