http://i.stack.imgur.com/YZXZN.png(我目前不允许嵌入图像)
我真的可以对上面的班级模型使用一些帮助。我很惭愧地说,我是“那些”在大学学习面向对象、编写考试、取得优异成绩但从未着手在我的真实世界代码中实施这些原则的开发人员之一。在开始编写应用程序设计之前,我从未真正坐下来考虑过它。因此,在单一的遗留银行应用程序开发和维护的重压下,我的设计和编码技能一直在慢慢消亡和停滞不前。经过多年的努力,我决定是时候做出改变了!我一直在深入研究设计模式、DDD、NoSQL、DI 等领域。过去两周对我来说是一段非常紧张的经历,有时我想我在为大公司和银行工作时错过的大量最佳实践和技术几乎让我流下了眼泪。我简直不敢相信这么长时间以来我与尖端技术和良好的设计方法相距甚远,而突然发生的所有事情都可能使我陷入编码瘫痪状态!我根本无法开始编码,因为我觉得我的设计需要更多调整,或者我需要对特定主题进行更多研究。不过,够了,我需要继续努力,至少对项目进行第一次迭代。突然出现的所有事情都威胁到我进入编码瘫痪状态!我根本无法开始编码,因为我觉得我的设计需要更多调整,或者我需要对特定主题进行更多研究。不过,够了,我需要继续努力,至少对项目进行第一次迭代。突然出现的所有事情都威胁到我进入编码瘫痪状态!我根本无法开始编码,因为我觉得我的设计需要更多调整,或者我需要对特定主题进行更多研究。不过,够了,我需要继续努力,至少对项目进行第一次迭代。
无论如何,足够的戏剧,关于我的问题:
我已经开始为我的高尔夫应用程序创建模型。想在一定程度上坚持 DDD,也想利用 NoSQL (RavenDB),我开始提出以下要求。
- 我的平台堆栈是 Windows / IIS / MVC 3.0 / RavenDB
- 我需要找到我的总根!我已经着手将它们定义为我的系统中唯一能够以自己的方式持续存在的元素。其他一切我都简单地认为是聚合的“子组件”。请注意,尚未定义实际行为。
- 我的聚合根将是唯一真正保留在我的 RavenDB 文档存储中的类,它们将“按原样”保留。就实现的性能优势而言,拥有大型树状类结构似乎是 RavenDB 的最佳情况。
- 我觉得不需要存储库层(一直在关注 Ayende 的一些帖子),因为 RavenDB API 感觉流畅且非常轻量级。如果需要,我将通过控制器上的自定义操作属性简单地打开和关闭我的会话。我已经看到如果没有存储库层测试可能会很棘手,但我肯定应该能够简单地模拟一些“内存中”域对象吗?
- 对数据库的写入将发生在单独的服务层中
- 有一次我停下来问自己:“我到底要把我的领域行为放在哪里!?”。搜索网络的普遍共识似乎表明我应该让我的域(实体)没有任何行为(业务逻辑),并将其全部在我的服务层中处理。但是在阅读了一些 Eric Evans 之后,我确信我的域行为应该存在于那里......在域中!
问题 - 作为 DDD 和建筑设计领域的真正菜鸟,我至少是在正确的轨道上,还是注定要毁灭?- 任何想法、警告、建设性的批评和对上述内容的见解将不胜感激!