本文翻译自 Oh No! DTO! by Robert C. Martin,这篇文章很短,强调的内容简单得不能再简单,也许大家早就意识到,但是,我依然可以在很多产品的代码里面找到文中所说的“教条”的影子,我说不清为什么,在这里有激烈的讨论,你们说呢?
本周我在教授XP(极限编程,译注)的课程,我们要写给当前的应用写FitNesse(一种测试工具,译注)的基础测试代码。其中一位程序员使用了RowFixture(一种测试结果比较的工具,译注),这种工具需要使用DTO(数据传输对象)并且要求其中的变量都为公有的。这时候这位程序员提出了质疑:“DTO应该使用私有的变量和一套相应的getter、setter方法!”,“为什么呢?”我问。
到底是为什么?面向对象的信仰如此根深蒂固地影响我们,以至于我们都无法识别出来,这里根本就只是一个数据结构吗?为什么我们要用一堆毫无用处的getter、setter方法,去遵循那些没有人可以解释的通的教条,来膨胀我们的代码呢?
在我的观点中,面向对象程序包含两种实体:对象和数据结构。对象有私有属性和公有方法,数据结构只有公有属性并且没有方法(或者只有一些毫无意义的数据访问方法)。有很好的理由去保持变量的私有性,我们想知道是什么方法在操纵它们,我们可以保护对象的数据,我们不想让其它人依赖对象内部的细节,即DIP(依赖倒转原则,Dependency Inversion Principle,即要依赖于抽象,不依赖于具体,译注)。但另一方面,对一个单纯的数据结构使用getter和setter并没有什么好处,一个数据结构只是一种数据简单的容器,没别的了!
---------------------------------------------------------------------------------------------------------------------------------
2012-2-22,以下补充内容译自 The C++ Style Sweet Spot by Bjarne Stroustrup:
我尤其不喜欢一个类里面有一大堆getter、setter方法,这通常意味着这个类一开始就不该是一个类,这个东西只是个数据结构。既然它是数据结构,就让它成为数据结构好了。
文章系本人原创,转载请注明出处和作者
分享到:
相关推荐
把分页按钮写在dto里,其他dto继承他
简单的EntityFramework4.3+三层+DTO,如果需要简化版的,我的资源里有一个不含DTO的版本。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、...
java DTO 详解 java DTO 详解 java DTO 详解 java DTO 详解
登陆的dto.zip
modify the property file of the database path, driver, user name, password, enter CMD to the D drive is running java-jar kingdao.jar disk in D test folder under the root directory of DAO and DTO ...
eclipse插件,根据数据库表自动生成DTO(pojo)插件!eclipse插件,根据数据库表自动生成DTO(pojo)插件!
DTO数据传输对象简介PPT
个人对DTO这种设计模式的一些粗略见解。
AutoMapper工具的使用 Dto 与 实体类 的值相互转换
AutoMapper完成Dto与Model的转换
标签:apollo-dto-1.7.jar,apollo,dto,1.7,jar包下载,依赖包
该工具可以对接数据库,将数据库中的表转换为java的实体类和DTO类。
Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码,代码可以直接复制到项目中使用,代码是基于pring框架的
NULL 博文链接:https://eddysoft.iteye.com/blog/1941484
CityEnigne的操作实例,CityEnigne2Dto3D,需要的可以下载
通过导入Excel模板快速生成DTO,简单易用,下载即可打开使用,加快开发效率
Springboot DTO字符字段与日期字段的转换问题 不会自动转换string与date 主要是这个意思,前端提交的JSON里,日期是一个字符串,而对应后端的实体里,它是一个Date的日期,这两个在默认情况下是不能自动转换的,...
简单的EntityFramework4.3+三层,这个版本不含DTO,如果需要有DTO的,请到我的资源里找。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、默认...
先配置文件的账户和密码,然后运行命令行,就可以自动数据库表里面的DAO访问类了,非常方便!
根据数据库生成实体类,生成的mapper.xml为空,请谨慎下载。使用说明:https://blog.csdn.net/L13890/article/details/81216441