本文翻译自 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 详解
eclipse插件,根据数据库表自动生成DTO(pojo)插件!eclipse插件,根据数据库表自动生成DTO(pojo)插件!
登陆的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 ...
DTO数据传输对象简介PPT
个人对DTO这种设计模式的一些粗略见解。
AutoMapper工具的使用 Dto 与 实体类 的值相互转换
AutoMapper完成Dto与Model的转换
标签:apollo-dto-1.7.jar,apollo,dto,1.7,jar包下载,依赖包
该工具可以对接数据库,将数据库中的表转换为java的实体类和DTO类。
Springboot DTO字符字段与日期字段的转换问题 不会自动转换string与date 主要是这个意思,前端提交的JSON里,日期是一个字符串,而对应后端的实体里,它是一个Date的日期,这两个在默认情况下是不能自动转换的,...
NULL 博文链接:https://eddysoft.iteye.com/blog/1941484
CityEnigne的操作实例,CityEnigne2Dto3D,需要的可以下载
通过导入Excel模板快速生成DTO,简单易用,下载即可打开使用,加快开发效率
简单的EntityFramework4.3+三层,这个版本不含DTO,如果需要有DTO的,请到我的资源里找。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、默认...
Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码,代码可以直接复制到项目中使用,代码是基于pring框架的
先配置文件的账户和密码,然后运行命令行,就可以自动数据库表里面的DAO访问类了,非常方便!
根据数据库生成实体类,生成的mapper.xml为空,请谨慎下载。使用说明:https://blog.csdn.net/L13890/article/details/81216441