在之前争论贫血还是充血的时候,有Tx提出这样一个观点book.Save()用起来很怪,有人认为这样子的用法不够OO,因为保存书不是书所具有的行为,而是书籍管理员:BookManager来发出比较合理。这里来说说我的看法,还是OO,继续接砖。
首先是我的看法,book.Save() 是不是符合OO的精神,关键是看怎么用。打个比方。如果是EditBook.aspx.cs中出现了book.Save()那么我觉得是不符合OO设计的思想的,因为保存书的行为确实不是书本身发出的。但是,如果有一个用户类User,在User里有个UpdateBook的方法,在这个方法里出现了book.Save(),那么我认为这是很OO的,因为修改后保存书的行为确实是用户发出的。但是有人可能会问了,那为什么不直接把book的属性读出来生成Sql去update数据库(也就是BookManager的做法,个人不赞同此做法)呢?很简单,根据OO的封装性原则,Book类的实例对自身状态的改变必须是由自己完成,所以我们需要对持久化book的属性这个改变book状态(未持久化状态到持久化状态的改变),如果是交给BookManager去完成那么就破坏了Book类的封装性,自然也就不OO了。
所以OO与否是看你设计的时候所用的思想是否遵循了OO的原则,而不是但看某行代码,book.Save()能OO也可以不OO,贫血模型不够OO的地方在于将事件序列的发起者交给了Service从而破坏了类本身的封装性。
论证完毕,劈砖大大的欢迎,写得很短,是因为快要下班了。
分享到:
相关推荐
"GPU高性能编程CUDA实战—book.h CPUBitmap.h等头文件"这个标题暗示了这是一个关于CUDA编程的实践教程,其中可能包含了`book.h`和`CPUBitmap.h`这两个关键头文件,它们在CUDA程序中起着重要的作用。 `book.h`通常是...
book.sql
编写book.xslt文档,要求在book.xml中打印出所有的section元素(包括属性)及其title子元素(并且保持section元素之间的嵌套关系);输出结果如下:
图书管理系统简单数据库
在cuda by example 一书的学习中,经常遇到HANDLE_ERROR()函数,原来这是这本书在book.h中自己定义的,这里提供下载
The.Book.of.R.2016.7.epubThe.Book.of.R.2016.7.epubThe.Book.of.R.2016.7.epub
Dive deep into dubbo user guide or download pdf to find more details, or Read dubbo admin guide or download pdf for dubbo application administration topics. Interested in how dubbo is designed, or ...
AsWing Book.pdfAsWing Book.pdfAsWing Book.pdfAsWing Book.pdf
flash\book.swf
Version Control with Subversion svn-book.chm TortoiseSVN-1.4.3.8645-win32-svn-1.4.3是由http://www.163disk.com/fileview_241204.html上传到163网盘,供大家免费下载。
The.Mathematica.Book.-.5Thed.(By.Stephen.Wolfram).rar The.Mathematica.Book.-.5Thed.(By.Stephen.Wolfram).rar
很多刚接触cudac学习的朋友,这就是按照书本上的代码用例来敲的话都会发现找不到book.h
Google.Book.Downloader.1.2
Book.cpp
[ng-book.2r53随书代码]ng-book.2.r53.2017.3.code-samples.zip
The.Kubernetes.Book.2020.9.epub
IDA Pro权威指南(第二版),英文版,pdf
book.save(); 更新: Book book = new Book(); book.setPrice(14.95); book.setPress("Anchor"); book.updateAll("name = ? and author = ?", "The Lost Symbol", "Dan Brown"); 删除: DataSupport.deleteAll...