`
october731
  • 浏览: 86595 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

领域模型设计的思考:存储过程与模型层设计的分离的弊端

阅读更多
这段时间在北京这边做开发,是在.NET 平台上的spring.net+NHibernate+SQL SERVER 2008的集成的开发。
由于是spring的技术,所以这个项目有很浓厚的MVC是缩影。我们现在的开发模式是这样:MVC模式三层都有我们A方这边的程序员开发,我们的查询业务基本上依赖于SP,SP由B方方面开发,但是由于需求做的不完善,以及B方方面对需求的理解的不完善,导致SP经常改动。但是SP的每次改动了之后,我们开发应用程序这边的程序人员却不知道,除非是这边的程序员去调试以前已经开发好的程序,不然基本上是很难发现他们修改了存储过程。而且,存储过程的修改,带来的不仅仅只是页面表现层的数据绑定的问题,在模型层的domain和dto很有可能都要随之改动。就算B方方面修改了SP第一时间通知了我们,我们修改相应的模型层对象,以及重新构造层与层之间的访问参数以及返回类型也是相当费时的事情。
这里并不是说领域模型的不好,面向对象的开发,以及更加全面深入的去了解自己所开发的域对象,这样当然是更好。但是就我们这个项目目前的开发方式和现状来说,效率是相当低下了。数据库是基础,SP是根基,SP的修改直接影响上层建筑,而SP的控制权却不在我们A方这边,B方是要完完全全的控制业务,我们A方所需要做的事情,就是按照他们的文档来开发,甚至都不用知道业务,纯粹是填代码的机械活了。还不如从一开始,就让A方来做设计工作(包括业务的设计和数据库的设计,我们A方并不是没有能力设计这个问题)。
分享到:
评论
5 楼 october731 2009-03-26  
nighthawk 写道
你说的领域模型是larman提出的还是eric提出的?
我怎么感觉你这个跟领域模型无关?谁控制了业务谁就控制了领域模型

韩国人控制了业务  一般来说domain不由我们来写   必要的时候我们也只写dto
4 楼 nighthawk 2009-03-25  
你说的领域模型是larman提出的还是eric提出的?
我怎么感觉你这个跟领域模型无关?谁控制了业务谁就控制了领域模型
3 楼 october731 2009-03-25  
魔力猫咪 写道

你们这是项目管理组织的问题,和领域模型没有任何关系。业务的变动必然带来领域模型的变动。你们其实只是一系列存储过程的外观罢了。不是用了几个Domain对象就是领域模型了。这个系统的领域模型其实是用数据库表和存储过程表示的。 你们的问题在于两个团队根本无法协调。他们的变更带来你们的变更是必然,问题在于你们根本不知道对方的变更。加之你们没有持续集成,很可能变更了很久你们才知道,修改的时候对方也无法给你们支持,时间长了可能他们那边都忘了。 我的建议是你们两个团队组合成一个团队(虚拟的,相当于远程协同开发),起码要共享需求任务列表。每次变更需要你们两方面在工作前进行协调,确认各自需要调整的地方和需要消耗的时间。

1.这个系统的领域模型其实是用数据库表和存储过程表示的。难道最基础的模型不是数据库?即使你说的真正的领域模型,就可以脱离数据库?即使你不用SP,但是你也觉得绕不过SQL或是HQL吧?
2.我们这里现在就是这样,SP那边的改动我们这边根本一点讯息都没有,只有当测试到这个页面的时候发现数据不对或是根本就不出数据的时候,跑到数据库一看,sp被人改了。关键是写业务的人在北京,写sp的人在韩国,我们有问题不能当面谈,还只能走文档的形式,一步步的提给他们再来解决。所以我们一直都是一个虚拟的团队,但是有两点阻止了我们的交流:1)地域;2)语言
2 楼 hsq972 2009-03-17  
魔力猫咪 写道
你们这是项目管理组织的问题,和领域模型没有任何关系。业务的变动必然带来领域模型的变动。你们其实只是一系列存储过程的外观罢了。不是用了几个Domain对象就是领域模型了。这个系统的领域模型其实是用数据库表和存储过程表示的。
你们的问题在于两个团队根本无法协调。他们的变更带来你们的变更是必然,问题在于你们根本不知道对方的变更。加之你们没有持续集成,很可能变更了很久你们才知道,修改的时候对方也无法给你们支持,时间长了可能他们那边都忘了。
我的建议是你们两个团队组合成一个团队(虚拟的,相当于远程协同开发),起码要共享需求任务列表。每次变更需要你们两方面在工作前进行协调,确认各自需要调整的地方和需要消耗的时间。


认同楼上说的!另补充:

既然是基于.net的项目,且业务全写在sp里,那么用领域模型去开发成本明显就比基于表入口的模式要高了!直接使用ado.net抽象了DAO加个service层就好.
1 楼 魔力猫咪 2009-03-16  
你们这是项目管理组织的问题,和领域模型没有任何关系。业务的变动必然带来领域模型的变动。你们其实只是一系列存储过程的外观罢了。不是用了几个Domain对象就是领域模型了。这个系统的领域模型其实是用数据库表和存储过程表示的。
你们的问题在于两个团队根本无法协调。他们的变更带来你们的变更是必然,问题在于你们根本不知道对方的变更。加之你们没有持续集成,很可能变更了很久你们才知道,修改的时候对方也无法给你们支持,时间长了可能他们那边都忘了。
我的建议是你们两个团队组合成一个团队(虚拟的,相当于远程协同开发),起码要共享需求任务列表。每次变更需要你们两方面在工作前进行协调,确认各自需要调整的地方和需要消耗的时间。

相关推荐

    springboot+vue基于java的网上订餐系统的设计与实现论文.docx

    该系统采用 B/S 架构、前后端分离和 B/C 模型设计,旨在解决传统购物方式的效率低下、安全性低和信息传输不准确等问题。该系统主要实现了用户注册、登录、购买美食过程、个人信息修改等功能,并提供了管理员对用户...

    C 程序设计课件:2 类和对象.ppt

    面向对象程序设计是一种现代的软件开发方法,与传统的面向过程编程有着显著的区别。在面向过程编程中,程序是由一系列函数和数据结构组成的,而数据结构和处理数据的函数通常是分离的。这种分离导致了一些弊端,比如...

    数据库调研结果

    在早期的软件开发中,数据往往存储在文件中,然而随着数据量的增长及应用需求的多样化,文件存储方式逐渐暴露出诸多弊端: 1. **文件安全性问题**:文件系统容易受到非法访问或恶意破坏,缺乏有效的权限控制机制。 ...

    MVC设计模式 - 发展进程

    模型层主要负责数据的存储和管理,以及业务逻辑的实现。在Java Web开发中,模型层通常由Java类(JavaBean或DAO)构成,它们与数据库交互,处理数据查询、更新等操作。模型层与视图和控制器完全解耦,确保即使视图或...

    学生信息管理系统java课程设计.docx

    生信息管理系统是一个...总的来说,这个学生信息管理系统是一个典型的CS(计算机科学)项目,涵盖了数据库设计、前端界面开发、权限管理等多个IT领域的知识,对于学习和实践Java编程以及软件工程流程有着重要的价值。

    毕业论文springboot199疫情打卡健康评测系统论文.doc

    该系统的设计和实现基于 Spring Boot 框架,采用了前后端分离的架构设计。前端使用 HTML、CSS 和 JavaScript 等技术,实现了用户界面与交互逻辑的设计。后端使用 Spring Boot 框架,实现了业务逻辑和数据存储的处理...

    问卷调查系统说明文档

    - **持久层设计与实现**: 持久层主要负责与数据库的交互,实现数据的存储和检索功能。常见的技术包括Hibernate、MyBatis等ORM框架。 - **业务逻辑层的设计与实现**: 该层负责处理具体的业务规则和流程,通常会封装成...

    基于Java技术的野生动物保护公益网站的设计与实现

    本设计将探讨如何运用B/S三层架构、Mysql数据库和JSP技术来实现这样一个高效、稳定的公益平台。 2 B/S三层结构模型 B/S(Browser/Server)三层结构模型是一种常见的Web应用架构,包括表现层(浏览器)、业务逻辑层...

    一种基于Java的在线考试系统开发与实现.pdf

    由于视图层和业务层分离,因 此更改视图层代码不需要重新编译模型和控制器代码,使得应用程序更易于维护和修 改。 ### 1.2 Swing界面开发 Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具...

    51CTO下载-韩顺平php从model1到分层再到mvc并使用smarty笔记-狄成浩dichenghao

    - **分离业务逻辑与界面**: 采用分层架构,将业务逻辑抽象为独立的服务层,界面层则专注于视图和控制器。 - **服务层**: 包括`Admin.Service.php`和`Emp.Service.php`等文件,封装具体的业务操作。 - **模型层**: ...

    数据库练习

    数据独立性分为物理独立性和逻辑独立性,使得应用程序与数据的存储方式分离,降低了维护成本,提高了数据的复用性。数据模型是数据库系统的基础,包括数据结构、数据操作和数据完整性约束,它是现实世界的一种抽象,...

    vue-springboot电影院订票信息管理系统java毕业论文.docx

    该系统采用 B/S 架构、前后端分离以及 MVC 模型进行设计,并使用 Java 语言和 SpringBoot 框架进行开发。 系统需求分析 在电影院订票中,传统的人工管理方法存在许多弊端,如效率低下、安全性低以及信息传输的不...

    《数据库原理》期末考试试卷

    1. 数据独立性:数据库设计的目标之一是实现数据独立性,即数据的逻辑结构与物理结构分离,以及应用程序与数据的存储方式分离。题目中提到的“三层模式”,指的是外模式(用户视图)、模式(逻辑模式)和内模式...

    struts2简介

    MVC设计模式是一种软件设计模式,用于将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以此简化复杂的业务逻辑,提高应用程序的可维护性。MVC中的模型代表了应用程序的数据和业务...

    试验室信息管理系统.doc

    系统结构清晰,易于维护,具有良好的扩展性和模块复用性,采用MVC(Model-View-Controller)设计模式,分离界面设计和功能实现,提升开发效率。 3. **系统特点** - **模块化**:开发层次分明,便于维护和扩展。 -...

    springboot+vue基于springboot+vue的乐享田园系统java毕业论文.doc

    3) 系统设计:设计系统架构,包括前后端交互机制、数据库模型以及业务逻辑处理。 4) 功能实现:具体实现系统各项功能,如用户注册登录、土地资源展示、租赁订单处理、反馈建议管理等。 5) 系统测试:对系统进行全面...

    MyBatis.docx

    持久化层(Data Access Object, DAO)是一种软件设计模式,用于提供一种方法将数据访问机制与高层的应用程序业务逻辑分离开来。DAO 层通常包括对数据源的 CRUD(create, retrieve, update, delete) 操作。 **2.3 ORM...

    jdk6_api_javadoc

    在软件开发领域,Java开发工具包(Java Development Kit,简称JDK)是开发和运行Java程序必不可少的基础。JDK6作为历史版本,尽管已被更新版本取代,但对于学习Java历史、理解经典API以及兼容旧项目仍然具有重要价值...

Global site tag (gtag.js) - Google Analytics