http://i.stack.imgur.com/YZXZN.png(我目前不允许嵌入图片)
我真的可以在上面的班级模型中使用一些帮助。我很惭愧地说,我是那些在大学里学习面向对象的“开发人员”之一,写了考试,然后开始考试,但从未在我的真实世界代码中实现这些原则。在开始编写之前,我从未真正坐下来考虑我的应用程序设计。因此,在整体遗留银行应用程序开发和维护的重压下,我的设计和编码技能一直在慢慢消亡和停滞不前。经过多年的努力,我决定绝对是改变的时候了!我一直在深入研究设计模式,DDD,NoSQL,DI等世界。过去两周对我来说是一次非常激烈的体验,有时我觉得我的体积几乎让我大开眼界我在大公司和银行工作时错过的最佳实践和技术。我简直无法相信我已经从最前沿的技术和良好的设计方法中走了多久,突然间一切都被威胁到让我陷入编码瘫痪状态!我根本无法开始编码,因为我觉得我的设计需要更多调整,或者我需要更多地研究特定主题。足够了,我需要破解并至少对项目进行第一次迭代。
无论如何,在我的问题上有足够的戏剧性:
我已开始为我的高尔夫应用程序创建模型。想要在某种程度上坚持DDD并且想要使用NoSQL(RavenDB),我开始考虑以下要求。
问题 - 作为DDD和建筑设计领域的真正菜鸟,我至少在正确的轨道上,还是我注定要毁灭? - 任何想法,劝告,建设性的批评和对上述内容的见解将不胜感激!
答案 0 :(得分:3)
要反对过度学习这一切并且长时间陷入分析:首先让它发挥作用。然后把它漂亮。
尽可能将行为放在数据附近。使用服务,如果你不能干净地将责任分配给一个类(例如,如果'转移资金'方法应该在SavingsAccount类上?)。服务可以是聚合的一部分。
使用存储库(我不同意Ayende)。您提到使用单独的服务层进行数据库写入。存储库是将该层放在后面的完美界面。它也是一个完美的测试缝。
没有彻底查看你的类图,但你可能在这里和那里过度使用继承。赞成合成而不是继承。继承可以很快地让它变得丑陋。
选择聚合根时,一个重要的标准是生命周期。当聚合根死亡时,聚合中的其他所有内容也会消失。聚合根也在控制之中,聚合之外的所有内容都通过它。如果有疑问,只需创建很多(单实体聚合)。对于文档数据库,您通常会按聚合存储文档,因此这与您选择它们的方式有所不同。存储对不同聚合的引用的ID。
答案 1 :(得分:0)
所以是的,沿着兔子洞走下去不会在短期内提高你的生产力,但可能会帮助你长期成长为开发者。 DDD,NoSQL等有很多东西你可以花多年时间学习。
如果你想让你的下一个项目取得成功,我的建议是坚持你所知道的,并逐步引入新技术,这样你总能感受到完全控制,而不是依赖于某人的“最佳实践”。忍住了。
答案 2 :(得分:0)
首先,请允许我祝贺你决定采取措施,努力变得更专业。我对这个行业缺乏职业感到绝望,有时候我觉得自己走的是80%的牛仔/黑客20%的专业人士。
问题: