热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

图书馆惊魂记之一(一个简单的领域模型的建立过程)

在大学里的某一天,一个漆黑的夜晚,我来到了一个学校里阴森的图书馆,虽然说不喜欢,但是为了考试不要零蛋,所以拼死也要温书了。来到图书馆的柜台前,遇到了图书管理员。然后我跟管理员说:“我来借书了”,管理员

在大学里的某一天,一个漆黑的夜晚,我来到了一个学校里阴森的图书馆,虽然说不喜欢,但是为了考试不要零蛋,所以拼死也要温书了。来到图书馆的柜台前,遇到了图书管理员。然后我跟管理员说:“我来借书了”,管理员头也不抬的把手一指:“书架在那边,自己去找”。

--------------------------------------------------------------------------------

image

---------------------------------------------------------------------------------

书架实在是很多,都是分门别类的把书放好在上面的,每个书架上都有标签,标明了这个书架上放的什么类型的书。

---------------------------------------------------------------------------------

image

---------------------------------------------------------------------------------

于是我一排排的在书架上开始浏览有些啥书

---------------------------------------------------------------------------------

image

---------------------------------------------------------------------------------

看到一本还不错的书,我就把书取出来,然后看看书的内容

------------------------------------------------------------------------------------------------

image      image

------------------------------------------------------------------------------------------------

看了看,写的不错,于是拿着这本书去找管理员:“我要借这本啊”。管理员二话没说,拿个本子记下来我借了这本书,然后在书上打个标签

------------------------------------------------------------------------------------------------

image

------------------------------------------------------------------------------------------------

然后我就接到了这本有用地书,然后回去温书考试去了。

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上的内容只是一个简单例子的模拟,而生成的类图也是很粗略的,我们通过对业务行为的分析(经典的借书过程来分析得到上面的图形-为了简单我直接用了VS的类图,其实不是很规范,有很多建模工具可以使用,领域模型的分析没有一定之规所以可能每个人分析出来的模型并不相同,所以如果你觉得有其他的理由,画成了其他的样子,那是完全合理的),回到主题,我们要通过领域模型来驱动我们的设计,但是,我们要弄明白的是什么是领域模型的分析,适合什么地方,什么时候不适合。

领域模型(Domain Model)是一个商业建模范畴的概念,他和软件开发并无一丝一毫的关系,即使一个企业他不开发软件,他也具备他的业务模型,所有的同行业的企业他们的业务模型必定有非常大的共性和内在的规律性,由这个行业内的各个企业的业务模型再向上抽象出来整个行业的业务模型,这个东西即“领域模型”。一个掌握了行业领域模型的软件公司,根本不需要再给人家开发项目了,根本不需要靠软件开发养活自己了,你光给这个行业的企业提供业务咨询已经赚得非常丰厚的利润了。

由此我们可知,领域模型的分析并不是我们要做这个软件的时候要做的,而是在这个软件所要实现的业务模式出现的时候就可以开始,所以领域建模比较适合需求比较固定,且业务模式比较成熟的领域。我们首先建立起一个领域模型,然后用最简单直接的类去实现这个模型。这个时候我们不涉及数据库以及持久化等等细节,然后对模型进行精化,利用设计模式将类进行分解,将领域模型的类的职责用多个小类来实现。

比如User类,我们可以用Factory模式加上Facade模式把这个类的职能和持久化行为(数据层的行为)解耦。

其实DDD不一定就是代表着臃肿的实体类,而我们很多时候是在自己设计的时候因为对OO和设计模式的运用不够熟练从而设计出了臃肿的实体类(我自己其实也经常弄出这种类出来-不过通过运用设计模式重构,在大多数情况下是可以改变的)。作为一个合格的程序员,能够快速的完成需求是必要的条件。但是如果只是要求能够做出来实现需求,是不是对自己的要求过低了点,我们不光是需要能跑起来的程序,还需要稳定健壮的程序,更甚的是优美的实现程序,如果仅仅是满足于实现需求,借用星爷的一句话:人没有追求,那和咸鱼有什么分别:)


推荐阅读
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • TechStride 网站
    TechStride 成立于2014年初,致力于互联网前沿技术、产品创意及创业内容的聚合、搜索、学习与展示。我们旨在为互联网从业者提供更高效的新技术搜索、学习、分享和产品推广平台。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 分享一个简化版的Silverlight链接图项目:Link Map Simplified
    本文介绍了一个使用Silverlight开发的可视化工具,主要用于展示和操作复杂的实体关系图(Graph)。该工具在犯罪调查系统中得到了广泛应用,帮助用户直观地获取和理解相关信息。 ... [详细]
author-avatar
猴子捞月亮A_118
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有