- 浏览: 74892 次
- 性别:
- 来自: 济南
最新评论
-
yangwn:
这个框架绝对的值得学习,日后向楼主多多请教~对了,楼主是否传几 ...
Helma是什么?1997年诞生的框架 -
shuxiang:
IE6.0/7.0好像都不支持,可以用它来减少HTTP请求,用 ...
data协议,好玩,好用 -
wv1124:
Map/Reduce算不,我们项目中加了个这个就号称云计算
不懂云计算的来看 -
wangtao0501:
兄弟有啥作品了吗,发出个来看看?
Helma是什么?1997年诞生的框架 -
mewleo:
condeywadl 写道老实说 框架那么多 不可能一个个都去 ...
几人了解Helma?
经过最近潜心研究,基于上次说过的草根想法 对象,你喜欢极品装备吗? 实现了一个简单的装备模式。
然后写了一个弱弱的实现框架,目前肯定无法投入到开发中使用,只是想证明这条路可以走走看~~~
框架也没名字,临时叫OMM(简单好记),下面让各位看一下使用方法和HelloWorld示例。
首先,需要一个POJO,这次用User,他有中英文两种名字。在中国叫他的中文名,在外国叫英文名(废话)。
注意:需要jdk5.0+
- package ddd.domain;
- /**
- * User模型
- * 属性:{
- * 英文名
- * 中文名
- * }
- * @author mewleo
- *
- */
- public class User {
- private String name_ch;
- private String name_en;
- public String getName_ch() {
- return name_ch;
- }
- public void setName_ch(String name_ch) {
- this.name_ch = name_ch;
- }
- public String getName_en() {
- return name_en;
- }
- public void setName_en(String name_en) {
- this.name_en = name_en;
- }
- }
然后,我们要制作两件"HelloWorld"要用的装备,让User可以say hello,一个说英语,一个说汉语的。
- package ddd.equip;
- import com.mewleo.oo.ddd.Equip;
- import com.mewleo.oo.ddd.Return;
- import ddd.domain.User;
- /**
- * User模型 英语hello
- * 输入参数 String name
- * 输出 Hello <name></name>,I'm <pojo.name></pojo.name>
- * @author mewleo
- *
- */
- public class User_EnglishHello_Equip implements Equip<user></user><user></user>{
- User u;
- public void execute(Return caller, Object parm) {
- String name=(String)parm;
- System.out.println("Hello "+(name==null?"":name)+"! I'm "+u.getName_en());
- }
- public void init(User pojo) {
- u=pojo;
- }
- }
- package ddd.equip;
- import com.mewleo.oo.ddd.Equip;
- import com.mewleo.oo.ddd.Return;
- import ddd.domain.User;
- /**
- * User模型 汉语hello
- * 输入参数 String name
- * 输出 你好 <name></name>,我是 <pojo.name></pojo.name> !
- * @author mewleo
- *
- */
- public class User_ChineseHello_Equip implements Equip<user></user><user></user>{
- User u;
- public void execute(Return caller, Object parm) {
- String name=(String)parm;
- System.out.println("你好 "+(name==null?"":name)+",我是"+u.getName_ch()+"!");
- }
- public void init(User pojo) {
- u=pojo;
- }
- }
大家可以发现,在接口部分使用了jdk5的泛型类,实现Equip接口的两个方法。Equip接口的装备只有一种动作Method!
然后,我们再来制作一件极品装备(一般来说,在游戏里普通装备是白色的名字,只有一种属性功能,而极品装备一般是
彩色名字,并且拥有多种属性功能,口水。。)
- package ddd.equip;
- import com.mewleo.oo.ddd.JPequip;
- import com.mewleo.oo.ddd.PackObject;
- import ddd.domain.User;
- /**
- * User极品装备
- * 动作{
- * 默认动作 defaultMethod
- * }
- * @author mewleo
- *
- */
- public class User_JPEquip extends JPequip {
- User u;
- @Override
- public void init(User pojo) {
- u = pojo;
- }
- @Override
- public User_JPEquip setUp() {
- return this;
- }
- @Override
- public Object defaultMethod(String actionName, Object parm) {
- System.out.println("[BETA]Making In China @By MewLeo ...");
- return null;
- }
- //自定义User类info方法,区分大小写
- @SuppressWarnings("unchecked")
- public Object info(Object parm){
- PackObject<user></user> user=(PackObject<user></user>)parm;
- return "User ["+user.getPojo().getName_en()+"] equiped ["+user.getSuit().getSuitName()+"]";
- }
- }
极品装备比较特殊,所以需要继承于一个 极品类,这样才能属性极品装备家族,里面有两个方法,一个是默认方法,一个是
显示对象装备信息的方法。当找不到极品装备中的某个方法时会调用默认方法。
到现在,我们的User装备已经准备完成了,下面要定义套装了。套装是为了适合不用的场景与环境搭配的。
这里我们假设两个场景,一个是User在中国,另一个是User在英国。
- package ddd.suit;
- import com.mewleo.oo.ddd.EquipUp;
- import com.mewleo.oo.ddd.PackObject;
- import com.mewleo.oo.ddd.Suit;
- import ddd.domain.User;
- import ddd.equip.User_ChineseHello_Equip;
- import ddd.equip.User_JPEquip;
- /**
- * User模型套装
- * 名称:中国
- * @author mewleo
- *
- */
- public class User_China_Suit implements EquipUp<user></user> {
- // 极品装备↓
- User_JPEquip jpuser=new User_JPEquip();
- public Suit<user></user> getSuit(PackObject<user></user> po) {
- Suit<user></user> s=new Suit<user></user>(po,"中国");
- s.setEquip("hello", new User_ChineseHello_Equip());
- s.setEquip("info", jpuser);
- s.setEquip("noaction", jpuser);
- return s;
- }
- }
- package ddd.suit;
- import com.mewleo.oo.ddd.EquipUp;
- import com.mewleo.oo.ddd.PackObject;
- import com.mewleo.oo.ddd.Suit;
- import ddd.domain.User;
- import ddd.equip.User_EnglishHello_Equip;
- import ddd.equip.User_JPEquip;
- /**
- * User模型套装
- * 名称:english
- * @author mewleo
- *
- */
- public class User_English_Suit implements EquipUp<user></user> {
- //极品装备↓
- User_JPEquip jpuser=new User_JPEquip();
- public Suit<user></user> getSuit(PackObject<user></user> po) {
- Suit<user></user> s=new Suit<user></user>(po,"english");
- s.setEquip("hello", new User_EnglishHello_Equip());
- s.setEquip("info", jpuser);
- s.setEquip("noaction", jpuser);
- return s;
- }
- }
套装中的装备绑定的名称,就是对象最终获得的动作action方法。
好了准备完毕了,看一看结构,是这样的树:
DDD
|—domain
| |—POJO
|—equip
| |—装备
|—suit
| |—套装
这里没用di容器,因为还有好多地方没有做优化,尤其是在众多装备的管理方面,将来对象的原子动作如果很多,那这里就会
相当难管理,这个问题要借助guice帮助,实现中···
好了,下面看一下如何让他们工作,并让User say hello!
- package ddd;
- import com.mewleo.oo.ddd.PojoPack;
- import ddd.domain.User;
- import ddd.suit.User_China_Suit;
- import ddd.suit.User_English_Suit;
- /**
- * 测试 装备对象
- * @author mewleo
- *
- */
- public class UserMain {
- public static void main(String args[]) throws Exception{
- //新User Pojo
- User user=new User();
- user.setName_ch("康夫");
- user.setName_en("Nobita");
- //两个包装对象,穿衣服,上装备
- PojoPack<user></user> chuser=new PojoPack<user></user>(user,new User_China_Suit());
- PojoPack<user></user> enuser=new PojoPack<user></user>(user,new User_English_Suit());
- System.out.println("chuser info:"+chuser.executeAction("info",chuser));
- System.out.println("enuser info:"+enuser.executeAction("info",enuser));
- // HelloWorld
- System.out.println("\n测试:");
- chuser.executeAction("hello","MewLeo");
- enuser.executeAction("hello","MewLeo");
- //修改user属性,执行hello
- System.out.println("\n修改再测试:");
- user.setName_ch("爪哇");
- user.setName_en("Java");
- chuser.executeAction("hello","MewLeo");
- enuser.executeAction("hello","MewLeo");
- //调用极品装备中不存在的方法...
- System.out.println("\n未定义方法:");
- chuser.executeAction("noaction");
- }
- }
我们来看看输出结果:
chuser info:User [Nobita] equiped [中国]
enuser info:User [Nobita] equiped [english]
测试:
你好 MewLeo,我是康夫!
Hello MewLeo! I'm Nobita
修改再测试:
你好 MewLeo,我是爪哇!
Hello MewLeo! I'm Java
未定义方法:
[BETA]Making In China @By MewLeo ...
这样使用对象,其实是很大程度的改变了原有的设计思想以及开发方法,把问题往下抛,让对象自管理,至少他能管好自己。
上面的源码和omm.jar在附件中,框架的源码请到我的论坛文件中下载http://groups.google.com/group/mewleo
希望大侠门多指教,像上次那贴被评良好但没几个回复的。。。。我需要大家的帮助才能成功的完成这一想法
还是,先谢谢了,看完挺累的~~休息眼睛。
- usertest.rar (13.5 KB)
- 描述: 里面包含omm.jar与ddd包和所有上述java文件
- 下载次数: 69
评论
至于这个框架,周末已经改了两次,发现他应用的场景
还很多呢,这里只实现了PojoPack类,对Domain封装。
后来发现我的ObjectPack接口可以扩展service或者静态
方法。
用Db4o的时候有位朋友写了一个泛型通用的DAO模板,
很像那个daozero,然后我在它的基础上进行包装,实现
扩展的模糊条件查询NQ,很爽。
然后继续思考,发现在Action或者在jsp中可以直接使用
包装对象,免去Service接口了,为通用的系统服务或者
静态方法做一个硬性装备,在ObjectPack实例话的时候
就装载(宠物?坐骑?家族召唤兽?地图兵器?),这样
一个最外层的ObjectPack对象就可以完成所有业务逻辑了
继续思考中.........
也是平时听的最多的词汇了,用这个词是为了其他人容易理解。
我经验不足,没有做过很多通用系统~你说的这个跟我现在相的好像
是一样的,但是这不是我全部的思路。我表达的思想是在企业应用中
在特定的场景,使用切面管理所用需要的plugin,当场景切换时
也能随时换成适合场景的一套plugin,其实我用装备的意思就是主
要表达“套装”的概念,上一帖子说过,其实主体思路是对象包装。
不知道这样说diz大侠能体谅我用词的原因了吧,不是我想用什么大词
相信您能理解。其实现在在管理装备与套装的部分还没有完善,希望
大侠不吝赐教,小弟感激不尽。
其实很多通用系统中都习惯采用这种方式!把组件当成装备!用过plugin的方式挂载在Adaptor上!
被pass掉了,我把代码复制到google文件了
可以到这看http://docs.google.com/View?docid=dcpd9tvz_35hffznj
或者下载附件看代码。
我不主张大家都用这种模式,这只是一个雏形~~~~~
请大家不要争论有关各种模型的选择问题!
大家按喜好随意选择,随心所欲。
发表评论
-
你有心理陷阱吗?
2011-04-08 23:07 750“我怎么会这样?”“我怎么老是破坏自己的好事呢?”“我为什么始 ... -
人工智能的哲学反驳
2010-07-30 21:36 872中文房间(The Chinese Room) “中 ... -
无法超越的Session
2009-10-19 12:04 1378记得之前从JE 某网友的言论中沉淀了一句话,让我记忆犹新。 ... -
道道道
2009-07-22 17:31 917原来无论好产品或者坏产品都不一定能卖的出去的。 营销之 ... -
阿里巴巴上的社交测试题
2009-07-17 16:51 927影响你社交能力的致命弱点! 答案: C型 ... -
从软件销售渠道的变化看需求
2009-05-23 13:05 930应用程序商店,他的本质就像AJAX,并不是新东西,为什么逐渐被 ... -
做艺术,不做技术
2009-05-11 00:23 1148技术,像个无底洞,没有不过时的技术,让人永远追赶时间效率和空间 ... -
给兼职美工的一封信
2009-05-09 15:42 963首先,想公开这封信 ... -
告别技术,曲线救梦想
2008-06-17 14:53 985放弃:技术 放弃:经验 ... -
对象,你喜欢极品装备吗?[更新]
2007-05-14 00:11 7357关于该思想的实现,请 ...
相关推荐
通过学习《领域驱动模型(DDD).pdf》这样的资料,开发者可以深入了解DDD的原理,掌握如何进行领域建模,如何划分限界上下文,如何设计和实现业务规则,以及如何有效地与其他团队成员协作,以实现高质量、符合业务...
DDD的核心理念是将复杂的业务逻辑转化为清晰的领域模型,以此来提高软件的可维护性和可扩展性。下面将详细阐述DDD领域的模型设计方案及其关键概念。 1. **领域模型**:领域模型是DDD的核心,它代表了业务领域的核心...
通过学习这个DDD案例,开发者可以更深入地理解如何在实际项目中应用DDD,包括如何定义领域模型,如何组织业务逻辑,以及如何设计和实现与数据库的交互。这对于提升软件开发的效率和质量,特别是面对复杂业务场景时,...
DDD则不同:它像是更小粒度的迭代设计,它的最小单元是领域模型(Domain Model),所谓领域模型就是能够精确反映领域中某一知识元素的载体,这种知识的获取需要通过与领域专家(Domain Expert)进行频繁的沟通才能将专业...
【基于DDD和微服务的中台架构与实现】是一本深度探讨现代企业IT架构的书籍,作者欧创新和邓頔结合实践经验,阐述了如何利用领域驱动设计(DDD)和微服务架构构建灵活且高效的中台系统。以下是该书涉及的主要知识点:...
MDD(Model-Driven Development)则是一个更广泛的概念,包括DDD在内,强调用模型来驱动整个开发流程,通过模型来指导软件的各个阶段,包括分析、设计和实现。DDD则侧重于设计范畴,它关注如何通过领域模型来组织和...
架构分层模型适配 金融支付系统的改造之路 可视化的遗留系统微服务改造 领域建模的易与难 领域驱动架构透析与架构解耦 如何让DDD落地 淘宝应用架构升级——反应式架构的探索与实践 微服务的容器化实践 物联网平台的...
DDD提倡的充血模型是什么? 体会下充血模型开发微信钱包系统 聚合和聚合根是什么? 领域事件是什么? 看看领域事件的本质(解耦,异步,削峰) 工厂和资源库的作用? 领域服务是什么? 通过用例分析法和领域事件梳理...
《.NET Core下的DDD领域模型项目详解》 在软件开发领域,领域驱动设计(Domain-Driven Design,简称DDD)是一种将业务逻辑与技术实现紧密结合的方法论。它强调以业务领域为中心,通过深入理解业务,构建复杂的软件...
ddd实现,有兴趣的同学可以看,一起研究交流,大家一起研究
本项目是采用Golang编程语言实现的一个基于领域驱动设计(Domain-Driven Design,简称DDD)的O2O(Online To Offline)业务模型。这个模型旨在为线上商店与线下门店提供全面的服务,包括但不限于多渠道管理、多门店...
### 领域模型驱动设计(DDD)之模型提炼 #### 概述 领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,它强调从业务领域出发进行软件设计,通过建立准确的领域模型来解决复杂业务问题。在DDD中,...
领域驱动设计(DDD)是一种软件开发方法,旨在处理复杂的业务逻辑和系统设计。在供应链商品域的实践中,DDD 提供了一种结构化的方法来理解和管理软件的复杂性。以下是基于标题、描述和标签的主要知识点: 1. **理解...
战术设计则关注具体实现,通过事件风暴等方式细化领域模型和聚合设计。 在软件设计中,我们面临一系列挑战,如如何快速理解复杂的业务、如何设计复杂的系统架构、如何拆解复杂业务以分而治之、如何避免重复造轮子、...
基于NET5的DDD模型脚手架项目源码.zip基于NET5的DDD模型脚手架项目源码.zip基于NET5的DDD模型脚手架项目源码.zip基于NET5的DDD模型脚手架项目源码.zip基于NET5的DDD模型脚手架项目源码.zip
DDD的核心是将复杂的业务逻辑转化为清晰、可操作的模型,以此来提高软件的可维护性和可扩展性。在实际应用中,DDD通常与中台架构结合,构建灵活、可复用的服务,以支持企业级的复杂业务场景。 DDD中的模板和工具是...
DDD的核心目标是通过深入理解业务领域,创建反映业务规则和流程的模型,以此来解决复杂的软件设计问题。它强调与业务专家的密切合作,使用通用语言(Ubiquitous Language),建立共享的理解,减少沟通成本,提高软件...
没有豪横的数据规划治理和服务,有的只是我们从供应链域一个业务场景的切入,迈出落实“数据中台”概念的一小步。古人有云“积土成山,风雨兴焉,积水成渊,蛟龙兴焉”,我们相信从小的业务场景的积累和沉淀,不断...
在软件开发中,领域驱动设计(Domain Driven Design,简称 DDD)是一种重要的设计方法,它可以帮助我们设计高质量的软件模型。在正确实现的情况下,我们通过 DDD 完成的设计恰恰就是软件的工作方式。在 DDD 中,分层...
架构分层模型适配 可视化的遗留系统微服务改造 领域建模的易与难 领域驱动架构透析与架构解耦 领域驱动设计在系统重构中的应用实践 如何让DDD落地 淘宝应用架构升级——反应式架构的探索与实践 微服务的容器化实践 ...