最近在做保险行业的iPad客户端应用,在项目过程中引入了领域模型设计和MVC的设计思想,引发了一番争论。从实践过程来看领域建模更多的是一种分析和设计业务模型的一种方法。由于在ios开发中并没有像J2EE开发企业应用这样成熟的开发框架,MVC更多的应用在表现层的开发,UIViewController严格来划分应当都属于View(视图层),这也不怪苹果在ios上更多是针对小应用或者游戏的开发的精简版。
个人认为不论在实际开发中是否引入领域模型层,都可以采用领域模型来分析业务,而在实际开发中领域模型层和J2EE现在广泛采用的Service层有相似之处。都是对业务逻辑的封装,Service层的引入来自于Controller层和贫血型模型层,由于随着业务逻辑的复杂度提升,Controller除了处理应用逻辑同时处理领域逻辑,造成Controller过重,从而将通用的业务逻辑提取出Service层作为封装和复用。贫血的模型从实际开发中更多是基于表的开发模式,从设计库表作为项目的核心,辅以业务流程图,最终实现为一个一个的Service。而领域建模从设计开始不关心数据存储和表现层,而是将业务模型抽象成一组相互协作的领域类,在类与类之间运用各种面向对象技术,使实际的业务映射成为类与类之间的关系。
在我们的实际开发过程中,大部分的和数据相关的都不是数据库存储的,更多的是接口的调用。在系统中实现业务逻辑的方法有很多,常用的Service+实体类起到了领域模型是起到同样的作用的,至于谁好谁坏,我觉得每个人的视角不同,做惯了J2EE的我想更容易接受Service+实体类的模式。
关于领域模型,100个人有101种领域模型,很难说谁的好谁的不好,只存在谁的好用谁的不好用。同时我们看到实际开发过程是一个除了代码,系统架构也在不断重构的过程。
在客户端开发过程中使用领域驱动是否大材小用了呢?我觉得一个领域驱动是一种习惯,一旦掌握了就不太愿意采用其他的设计方法,即使它的业务逻辑很简单。第二,领域建模是一种设计方法,与具体的开发架构没有必然的联系,团队可以选择自己熟悉的开发框架来做。
写的有些乱,全当给自己备案,有机会把实际项目中的设计总结一下。
分享到:
相关推荐
移动应用程序开发是一个充满挑战和竞争的领域,需要不断创新和改进。 创建成功的移动应用程序的关键方面之一是提供无缝且引人入胜的用户体验。 用户希望以自然直观的方式与应用程序交互,并收到个性化和相关的响应。...
STM32fcu,燃料电池控制器,质子交换膜燃料电池系统模型(PEMFC),基于MATLAB simulink开发,主要部分有空压机模型,供气...它具有高效率、低排放和快速启动等优点,适用于移动电源和能源转换等领域。 MATLAB/Simuli
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
基千仿真模型, 对移动机器人样机平台进行选型和装配,通过双嵌入式开发板完成对移动机器人的控制工作,其中树苺派4B搭载Ubuntu系统,实现上位机和机器人的连接,将路径 规划出的速度和角度控制指令传输至STM32...
然而,深度学习模型的计算成本通常很高,这限制了在计算资源有限的移动设备上的进一步应用。 PocketFlow 旨在为开发人员提供一个易于使用的工具包,以提高推理效率,而不会或几乎没有性能下降。开发人员只需要指定...
ad-hoc 网络的迷人优势吸引了许多研究人员开发新算法以在该领域提供高效服务。 移动模型用于在实际完成之前模拟移动节点在不同网络场景中的行为。 在对 ad-hoc 网络进行的前期研究中,观察到移动模型分为两组:实体...
开发机器学习模型以准确检测和拦截移动交易中的欺诈行为 语境 缺乏关于金融服务的公开可用数据集,尤其是在新兴的移动货币交易领域。金融数据集对于许多研究人员尤其是我们在欺诈检测领域进行研究非常重要。问题的一...
基于非线性模型预测控制的移动机械臂运动规划与控制Python源码+使用说明(支持docker部署).zip 基于(非线性)模型预测控制的移动机械臂(mobile manipulator)运动规划与控制。 安装 ## 1. 使用Docker进行部署(推荐...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
以减少使用电缆和通过移动领域的劳动力把项目执行时间降至最低,由国际电工组织主编的IEC61850通信标准符合信息标准化的特点,且具有国际通用性,在智能变电站中大量推广(不排除个别站仍然使用104协议)。...
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
讯飞星火大模型 Python api 接口,快捷方便地在 Python 项目中引入星火模型。支持讯飞星火v3.0 v2.0 v1.0。支持接入”星火知识库“.zip 软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
领域模型生成器Realm模型代码生成工具,用于快速创建和编辑Java,Object-C和Swift Realm模型对象。 Realm Model Generator是基于文档的OSX工具,可通过使用单个Realm模型生成跨平台Realm模型对象来帮助移动开发人员...
1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法...
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
基于GPT技术:ChatGPT是基于著名的语言模型GPT(Generative Pre-training Transformer)技术开发的,GPT技术可以让ChatGPT具有更强的语言理解和生成能力,从而实现更加自然、流畅的对话效果。 可扩展性强:ChatGPT...
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...