《代码整洁之道》读书笔记----第六章对象和数据结构

本文介绍了《代码整洁之道》第六章关于对象和数据结构的内容,探讨了数据抽象、数据与对象的反对称性、得墨忒耳定律(最少知识原则)以及数据传输对象(DTO)的概念。强调理解对象应暴露行为、隐藏数据,而数据结构则侧重于暴露数据。灵活运用两者,遵循适当的编程原则,以达到代码的整洁和可维护性。
摘要由CSDN通过智能技术生成

一、数据抽象
1.类是如何把自己的数据展示给外界
(1)直接暴露数据,类似与数据结构的形式
(2)用户通过函数直接操作数据本体,而不用知道数据本身,以抽象的方式展示数据

2.不暴露数据细节,以抽象的形式展示数据的时候,不只是添加接口,或者使用复制器、访问器就可以,要以最好的方式呈现某个对象包含的数据,需要严加的思考。

二、数据、对象的反对称性
数据结构:曝露其中数据,没有提供有意义的函数

class Student{
	string name;
	int id;
}

class Teacher{
	string name;
	string power;
}
class Person{
 	public void SayIdentity(object people){
		if(people instanceof Student){
		Console.WriteLine($"{people.id},Name:{people.name}");
		}
		else if(people instanceof Teacher){
		Console.WriteLine($"Name:{people.name}",Power:{people.power});
		}
	}
}

当添加新的class Headmaster{}时候,添加完之后,要去修改Person类添加新的函数。
不过在Person添加新函数的时候,不需要去修改class Teacher,class Student的东西。
理解是:数据结构类,+函数操作类,偏向于过程式的编程,可以付出很小的代价添加新函数,可是添加新的数据结构的时候,要付出的代价却很大

对象:隐藏数据,通过抽象之后,曝露数据的操作函数

Interface IPerson{
	void SayIdentity();
}
class Student:IPerson{
	string name;
	int id;
	public void SayIdentity(){
	Console.WriteLine($"{id},Name:{name}");
	}
}

class Teacher{
	string name;
	string power;
	public void SayIdentity(){
	Console.WriteLine($"Name:{name}",Power:{power});
	}
}

当添加新的class的时候只需要实现接口IPerson即可。
但是在IPerson接口添加新的函数的时候,却要修改所有的实现类。
理解是:面向对象的编程,可以付出很小的代价添加新的对象,添加新函数的时候,要付出的代价却很大

两种方式都各有用处,不存在纯面对对象。

根据需求进行选择,大部分都是采用面向对象的方式,当然,如果是那种数据结构基本不变,操作函数却经常变换的,可以使用过程化编程。

三、得墨忒耳率—最少知识原则
通俗来讲,调用的过程中只允许有一个“.”操作符的存在。
简单的使用拆分把一长串的 demo.funcA().funcB().funcC()拆分成
var temp1=demo.funcA();
var temp2=temp1.funcB();
var temp3=temp2.funcC();
是一个比较简单的解决变法。更好的做法是
var temp3=demo.CreateTemp3();
隐藏掉temp3的实现细节

四、数据传输对象
类似与数据结构,只有公共变量,没有函数的类----DTO(Data Transfer Objects),常用于与数据库交互,套接字传递信息之类的场景中。
Active Record,是只含有prop变量的类

五、总结
理解对象曝露行为,隐藏数据;----便于添加新类型
数据结构曝露数据,没有明显的行为;----便于修改函数操作
灵活的使用对象和数据结构,得墨忒耳虽然有好处也有坏处
总之一句话,过犹不及。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值