BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

文章:领域模型管理与AOP

| 作者 Mats Helander 关注 0 他的粉丝 ,译者 王丽娟 关注 0 他的粉丝 发布于 2008年2月29日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

如今,很多项目都关注于领域驱动设计,但事情并非总是那么容易。其中最重要的事情就是从只因技术原因而存在的代码中将领域代码分离出来。

Mats Helander在InfoQ写了一篇文章,是关于如何用他称为领域模型管理的概念来设法处理领域模型。在文章中,Mats引领读者一步步解决了在实现一个领域模型时涉及设计和关注点分离的普遍问题,解释了解决问题的方法,并传授了在这个过程中出现的面向方向编程、一对设计模式、以及关于对象/关系映射的一些知识。

在下面的文章摘录中,Mats谈论了把基础架构代码放在哪里的问题:



随着基础架构代码的增长,找到一个处理它的优良架构变得越来越重要。问题主要在于——我们是否允许把一些基础架构代码放在我们的领域模型类里面,还是无论如何应该避免这样做?

避免基础架构代码进入领域模型类的论点是强有力的:领域模型应该表示应用程序所处理的核心业务概念。对于想大量使用其领域模型的应用来说,保持这些类干净、轻量级、易于维护是一个极好的架构目标。

另一方面,我们接下来将会看到,保持领域模型类完全不含基础架构代码——通常被称为使用POJO/POCO(Plain Old Java/CLR Objects)领域模型,这种极端的路线也被证明是有问题的。最终往往导致采用笨重的、低效率的变通方法来解决问题——而且有些功能用这种方式根本不可能实现。

也就是说,我们遇到的还是一个权衡利弊的情况,我们应该尽量在领域模型类里面只放必不可少的基础架构代码,决不超出这个限度。我们付出领域模型的轻微发胖,换来效率的提高以及使一些必要领域模型管理功能有可能实现。毕竟,软件架构很大程度上是关于如何做一笔好买卖。

阅读全文:领域模型方面的管理

获取源代码

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

这篇文章写的很好,解决了我很多疑惑,支持! by jdi dj

这篇文章写的很好,解决了我很多疑惑,支持!

很好 by gao linnchord

很好的文章,来龙去脉讲的很清楚,描述清晰。

DMM的概念很不错 by wang jacky

DMM的概念很不错。

非常感谢Infoq提供这么好的文章 by Lei Da

就像jdidj说的那样,这篇文章真的解决了我很多的疑惑,让我第一次真正地深入了解了AOP背后的故事。

不错 by 林 冲

写得不错的一篇文章

lazyInterceptor.OnPropertyGetSet(this, "Salary");有问题 by ZHOU Tony

public class LazyInterceptor
{
public void OnPropertyGetSet(object obj)
{
ILazy lazy = obj as ILazy;
if (lazy != null)
{
if (!lazy.Loaded)
{
lazy.Loaded = true;

//perform lazy loading...
//(omitted)
}
}
}
}

他是这么定义的,怎么能调 lazyInterceptor.OnPropertyGetSet(this, "Salary")?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

6 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT