本文以“一家人”为例,演示如何用面向对象的思维写代码。这是一篇文字很多的文章。我建议您仔细阅读它,因为它将完整地展示构建面向对象代码的过程。当然,这个思考过程是我个人的过程。每个人都有自己的思维方式。我的仅供参考。1、要写面向对象,首先要构思。这个概念通常是随机的。可以自己脑子里构思,也可以用专业的UML来构思,也可以用纸笔来构思。总之,一切都是免费的,只要你喜欢。那么下图就是我在纸上画的思路:2.形成你的思路通过思路慢慢梳理形成自己的代码思路。回到“家庭”这个例子,我是这样想的:一个家庭肯定有家庭成员,所以我可能有一个IMember接口。然后想到家庭成员之间存在一定的关系,比如父子关系,母子关系,所以就有了IRelation接口。然后我想到了家庭属性。家庭应该是独一无二的,有自己的定义,所以才有了Family。有了Family,我觉得应该抽象成IFamily,IFamily很可能有姓氏,人员名单等属性。或方法定义。然后回头看了看之前的思路,觉得关系有很多种,可能是一个枚举,于是就有了RelationTypes枚举对象。然后就是关系,可能需要一个关系管理类来管理。所以,我有RelationManager类。最后我想到了家庭成员,每个人都有自己的个性。性格是复杂的,不一定是单一的。比如有的成员积极热情,比如面冷心热的父亲。所以我觉得personality应该是一个带Flags标签的枚举,让一个成员可以有多个personality。3、检查审核,了解您的需求是否符合我们的工作。对于一个功能开发项目,它首先保证的是实现业务需求。所以,我们在做了简单的建模之后(思路就是建模过程),还需要结合实际看是否符合需求。那么我们再来看“家庭”的例子。由于我是举个例子,它目前的简单建模可能是正确的。暂时不需要增加其他要求。但是现在觉得建模是没有问题的。在真正写完代码之后,我们在实际项目中可能会面临一些没有考虑到的点。这时候就需要迭代建模。直到你的想法正确为止。4.关于对象的方法或者属性,我个人的习惯是简单的对整体框架进行建模后开始写代码。有些人可能做事比较细致。在构建阶段,他们会想提前定义每个对象的方法或属性,这也是可以的。看你习惯和喜欢什么。5.编码,我们先写关系代码。1.先定义成员关系接口。2.定义成员关系类型的枚举。3.定义关系创建接口。这里需要稍微注意一下,这和我简单的建模规划有关。有点不同的是,添加了一个用于创建关系的界面。因此,在我们实际编码过程中,针对业务情况会出现偏差,需要重构建模。4.定义会员接口的实现类。这里需要注意的是,我这里把实现类定义为internal,也就是说,除了我们自己,外部调用我们api的人,也就是外部程序员引用我们的dll,是不可能直接new一个Relation对象的,因为我们将其定义为内部类。这样就可以规范外部调用者的行为,规定如果他要实例化Relation类,必须通过其他方式实现。5.定义关系创建类这是别人要创建关系时必须经过的方式。因为他不能实例化Relation类,只能通过我的RelationBuilder对象的Create()方法来创建,规范了使用我们api的人的行为。六、编码,我们写家庭成员和性格的代码1.家庭成员的接口定义我们会看到家庭成员接口只定义了两个属性:全名和性别,但是家庭成员是有性格的,为什么不把他们放在一起写什么?这就是面向对象的接口隔离原则。可以参考我之前的文章。《接口隔离原则》有单独的文章。2.家庭成员的性格枚举,注意性格是多重的,所以我们的枚举要定义为Flags3。然后我们定义一个家庭成员的个性界面4。最后,定义家族成员的实现类Member.cs注意这个成员实现类,它实现了两个接口,分别是IMember和ICharacter。我们用两个参数fullName和sex定义了它的构造函数。所有公共公共属性都是只读的,这意味着其他人只能访问它们而不能修改它们。打开设置个性的方法SetCharacter()。好了,由于文章篇幅很长,关于家族的界面我就不继续写了。相信通过以上两个例子,你也学会了如何编写面向对象的代码思想。如果你能学习并应用这个思路,那么我为你感到高兴。
