在软件设计中,估计模型是最简单的了,一般而言,我们的模型都指的是贫血模型,也就是DTO,正常而言,每个DTO都对应一张数据表,所以在设计模型的时候,大家都没有考虑过多,完全按照个人想法来搞,当然这种在一般情况下,也没有什么问题,但是在多个系统和多个开发人员配合的时候,如果没有设计好,后面还是会带来无尽的痛苦,下面就以我司的一个例子做一个反面教材,如果说的不好或者不对的地方,还请不吝赐教。
现在情况是这样的,有一张表t_x,管理后台为了能够操作这张表,在manager这个项目中,加了一个X1这个模型,Server端为了操作这张表,也加了一个模型X2,但是由于管理台和Server非一个开发人员编写,导致在定义这两个对象的时候,,一些属性名称不一致,而管理台在向这张表插入数据的时候,会保存到Memcache中,而Server端会在Memcache中去取这个对象,但是由于两个对象并非一致,导致取出来,有些属性为空,这是开发人员就做了一个折中,在取的时候,先用管理台定义的对象来承接,然后在将这个对象中的每个属性set到Server定义的对象中,这样Server就能从Memcache中间接拿到自己要用的对象,然后当时这个折中是一个相当垃圾的解决方案,因为后面每次修改t_x这张表,比如新增字段,不仅管理台的X1要新增属性,Server端的X2也要增加属性,还得再从Memcache取的时候进行一下转换,把管理台增加的属性set到Server端对应的属性,从这儿就可以看出这是多么垃圾的一个模型设计,但这不是gc,gc是前两天发现,在client端也有自己的一个模型,这个模型也是针对该数据表的,这样,仅仅这一个表,就对应三个对象,而且还得随时记得增加属性,还得去memcache那边去操作一下,这还不算其他项目中用到的……一想到这里,都不想继续说了。
这部分代码,重构已经是势在必行的了,关于Model层的设计,在此小小的发表一下本人的看法。个人觉得,模型层应该单独抽出,建立一个独立的工程,比如Common,所有表的模型都在此工程建立,建好之后,以jara包的形式,提供给各个模块使用,这样就能保证各个模块使用的都是相同的模型,而且在向Memcache等缓存中放得时候也非常方便,因为放进去的和取出来的都是同一个对象。但是这个也有一个小小的缺点,不够灵活,比如某个项目在表中新增字段,它的去Common工程中增加对象属性,然后再打包,然后替换各个项目中的jar包,感觉上是没有在自己项目中直接修改来的快,不过本人觉得这也完全不是问题,现在有很多手段管理工程的jar包和依赖,比如使用Maven。
分享到:
相关推荐
在IT行业中,建模是软件开发过程中的一个重要环节,它帮助我们清晰地理解系统的结构和功能,便于设计和实现。本资源提供了一种用于项目model、Dao层、业务层建模的工具类,旨在简化开发流程,提高代码复用性。下面...
这个工具能够帮助程序员快速生成DAL和Model层的代码,从而将精力更多地集中在业务逻辑和创新功能上。 CodeGen的核心功能在于自动化生成数据库交互代码和数据模型类。DAL层通常包含了对数据库的操作,如查询、插入、...
在这个背景下,"MVC model层代码生成器 C#"是一个工具,旨在帮助开发者自动生成Model层的代码,从而提高开发效率,减少手动编写重复代码的时间。 代码生成器通常会根据数据库的结构自动生成对应的Model类,这些类...
"Model层代码简易生成器 带源码"就是一个为开发者提供便利的小工具,它能自动生成Model类的代码,从而节省手动编写的时间。 该生成器的设计目标是简洁高效,尽管生成的文件格式可能不是最专业或最精确的TXT格式,但...
通过这个"Model/BLL/DAL 三层小例子",你可以学习到如何组织和设计一个分层的系统,理解每一层的作用,以及它们之间的协作方式。这在开发大型、复杂的企业级应用时尤为重要,有助于构建稳定、可维护的软件。
- Model层分为三个主要操作类别:滤镜操作、图片代数操作和日志操作。 - 滤镜操作的算法存储在`filters`中,`filteroperation`负责调用这些算法。 - 图片代数操作算法在`aux_image_alg.cpp`中,对应函数在`...
JSONModel MVC demo是一个示例项目,它展示了如何在iOS应用中使用JSONModel框架来实现Model-View-Controller(MVC)设计模式。JSONModel是一个强大的库,用于将JSON数据自动映射到Objective-C或Swift的对象中,简化...
JSP的两种设计模式,即Model1和Model2,是Web开发中常见的架构模式,主要用于分离展示层、控制层和业务逻辑层,提高代码的可维护性和可扩展性。 **JSP Model1模式**是最基础的JSP开发模式,主要特点是将业务逻辑、...
在网页交互设计中,弹出层是常用的一种增强用户体验的方式,能够方便地展示重要信息或者进行用户操作确认。LayerModel插件的拖动功能使得用户可以自由移动弹出窗口,提高交互的灵活性。 一、jQuery LayerModel弹出...
企业信息管理系统是现代企业管理的重要工具,它通过集成各种信息技术,实现了对企业数据的高效管理和分析,为企业决策...通过精心设计和不断优化,我们可以构建出一个强大而灵活的信息管理系统,为企业带来更大的价值。
通过这样的两层设计,开发者可以更专注于业务需求的实现,而不是基础架构的编写。 【知识点】: 1. **C#编程语言**:C#是由微软开发的一种面向对象的、类型安全的编程语言,常用于Windows平台的开发,尤其是.NET...
通过这个PetShop的实例,新手可以学习到如何组织和实现一个完整的三层架构应用,理解各层之间的职责划分,以及如何通过接口和工厂模式来降低组件间的耦合度。此外,还可以了解到数据库操作的基本方法和面向对象编程...
在 TP5 中,`tp5自动生成控制器和验证器model层` 的功能主要依赖于命令行工具(Artisan)。Artisan 提供了一系列的命令,其中包括 `make:model` 和 `make:validate` 命令,可以用于生成 Model 和 验证器类。然而,这...
jQuery作为一款强大的JavaScript库,提供了丰富的插件来实现这一功能,其中LayerModel便是极具代表性的弹出层插件之一。本文将对jQuery弹出层插件LayerModel进行深入探讨,揭示其工作原理和应用技巧。 LayerModel...
对于Model层,它会根据数据库表结构自动生成对应的实体类,每个实体类对应一个数据库表。Dal层则会生成与Model层实体类相对应的数据访问接口和实现,包括增删改查等基本操作。最后,Bell层的代码生成会包含对Dal的...
MVVM(Model-View-ViewModel)设计模式是现代软件开发中的一个重要概念,尤其在iOS应用开发中被广泛应用。它是一种从MVC(Model-View-Controller)模式发展而来的架构模式,旨在提高代码的可测试性、可维护性和组件...
【标题】"摄影课程设计 C# 三层架构"是一个基于C#编程语言的软件开发项目,主要用于构建一个摄影课程管理平台。在这个系统中,开发者采用了经典的三层架构模式,这是一种常见的软件设计模式,能够将业务逻辑、数据...
8. **扩展性与定制化**:虽然代码生成器提供了基础的BL、DAL和Model层代码,但开发者还可以根据实际需求对其进行扩展和定制,添加更多的业务逻辑或自定义数据访问方法。 总的来说,C#代码生成器是现代软件开发中不...
还可以生成文件”指的是一个自动化代码生成工具,这种工具在IT行业中通常用于提高开发效率,尤其是在基于数据库驱动的应用程序开发中。让我们详细了解一下这个知识点。 首先,Model层的Class是指面向对象编程中的...
总的来说,利用C# WinForm的T4模板生成model、数据库访问层和业务层是一种高效且可维护的开发策略,它可以帮助开发者减少重复工作,专注于更重要的业务逻辑和用户体验设计。通过熟练掌握T4模板的使用,你可以显著...