我看有的项目是在接口里用Hashtable做参数传入,Vector返回结果,这样的确做到了接口的灵活性,但是这样符合软件设计的思想吗?
使用设计模式。
>Hashtable做参数传入,Vector返回结果
这是一个非常愚蠢的做法,接口是业务的代表,说白了,是脱离语言平台也能存在,怎么能混入java语言的Hastable呢?
使用UML来建模对你来说非常迫切,否则你无法搞清楚哪些属于业务设计,哪些属于语言细节设计。而学习GoF设计模式可以帮助我们实现这种锻炼。
所以,学习Evans DDD之间一定要有良好的设计模式基础。
[该贴被banq于2008-05-21 13:52修改过]
我还想问一个简单业务的实现如何设计:
一个发布信息的功能,在发布信息前要检查当前角色的是否有发布的权限,涉及到两个功能,信息发布功能InfoService,角色权限查询RoleService
设计方式一:
InfoService接受发布内容Message和用户User,然后调用RoleService查询User的角色权限,没有权限则抛出NoAccessException,有权限则调用DAO保存信息
设计方式二:
增加一个权限控制器RoleManager作为调停者,调用RoleService查询权限,再调用InfoService进行消息的处理
我觉得这两种都不是很好,但是又想不出更好的方式,这种互相关联的业务逻辑应该如何来设计?
另外既然role和user关联,还需要再次查询么?ManyToMany或ManyToOne的关系载入就可以了,照你的想法role是关键性的作业,是领域的一部分,那就应该让user持有role了。
使用AOP拦截器来实现角色对具体功能权限的操作已经是一个成熟方案,在书写上可以采取XML配置,或使用元注释@实现。
接口如何才能脱离语言平台呢?孤陋寡闻了?
比如定义接口:
interface dbconnect{
public abstract getConn();
}
那么怎么可能既有java实现这个获得db连接的接口,又有c#实现的获得db连接的接口??