从项目始末谈面向对象——领域模型
利用端午放假的时间,腾出这点时间总结下对于领域模型的思考,也许这思考可能不如端午的粽子可口、美味。
但是尝下不同味道的粽子,也是不错的。
希望,大家会喜欢这样的粽子。
言归正传,什么是领域?什么是领域模型?
先举个不着边的例子,比如端午节的粽子。从包粽子的过程中涉及到几个现实对象的关系:糯米、叶子、苇草、馅的关系。可以用软件表示手法来看粽子的对象关系图。
图一:粽子领域模型图
从上述的模型图,可以看出粽子这个概念是由叶子、苇草、米、馅这几种概念对象组合而成的。粽子的演进也可以通过采用不同的具体对象来达成,
比如叶子用竹叶、芭蕉叶;苇草采用江西苇、芦苇;米采用糯米,普通米(珍珠米,泰国香米);馅采用肉馅、虾仁,或者采用组合馅。
从软件实现的角度来说,是通过继承、泛化来实现不同的粽子。但无论是什么样的粽子,粽子这个概念始终要跟叶子、苇草、米、馅这几个概念相互关联。
因此,我们也可以知道什么是领域模型?领域模型阐述了领域(某一类概念、产品、事物)中心的重要概念,以及阐述了这些概念之间的关系。领域模型对领域内的重要概念和现实中的对象做了可视化的表示。
了解了领域模型这个概念后,那么领域模型中概念有几种典型的形式?大概有如下的形式:
1)业务对象(业务资源)
2)系统中要处理的现实世界中的对象和概念。
举个简单的例子来描述下什么是业务对象,什么是系统中要处理的对象和概念。比如操作系统这个领域,还是先通过操作系统的领域模型来阐述什么是业务对象(业务资源),什么是系统中要处理的概念和对象。
图二: 操作系统领域模型
图中在OS中就是操作系统这个领域要处理的对象和概念,OS边界外的就是业务资源。在OS这个领域中,通过处理进程、进程管理、文件系统、内存管理、IO调度、
设备这个几个概念或者对象,从操作了物理内存、存储介质、网卡、CPU等实际资源对用户呈现了一个可以编辑、网上冲浪、听歌等功能计算机或者类似的系统(平板、手机)
等产品,业务对象或者叫业务资源一般是在系统边界之外的,如果系统的边界不同,所看到的业务对象范围也是不同的。
领域模型着重从用户的角度,对系统涉及的现实对象,以及之间的关系进行阐述、可视化表示。
在领域建模的过程中,需要进行什么样的活动?
1)沟通,理解领域应用。一般进行领域建模,需要该领域内的专家进行沟通,尝试理解这个领域的应用。理解领域应用注重问题域的角度,了解系统的业务规则。
从使用的角度,进行系统阐述。
2)查找领域类——概念类。通过沟通、领域理解,进行领域类的发现,这个类是现实的对象,基于用户角度、用户可以感知到的类。
有时,我们会将实现类和现实的类混淆。
3)详细说明概念类,构建数据字典表。构建数据字典表,有利于领域建模的交流。
4)确定概念类之间的关系,其实从某一种角度,也在构建一种业务规则。
总之领域建模,是用户的角度去理解、阐述领域应用,从而寻找领域中的现实对象。