NEO的程序中过分亲密的类关系

NEO是开发的网上蜂蜜商城中常常会让几个类有说不清道不明的关系,NEO即使付出再大的代价调试,他也不去拆分明确这些类的关系。系统终于在NEO的巨大付出下上线了。小朱是一个网购达人,她想去买一瓶优质的蜂蜜,浏览了jd和taobao这些网上商城都没有找到自己心仪的,突然在一个不经意的地方发现了NEO的商城链接,小朱进去之后购买了一瓶蜂蜜之后留下了建议,希望网站能做到最新蜂蜜信息能够通过邮箱、手机、微信等方式及时推送到我的手上。

NEO下班回来看到了这个消息觉得小朱的建议很有价值,这样可以更多的留住回头客。NEO开始设计代开发,这个网站建设都过了一些时间了,当时写的逻辑都忘记的差不多了,NEO读着代码发现有关客户的资料信息在很多类里面都有描述,比如在客户类中有客户喜好,但是在客户偏好里面有客户联系的信息,这几个类就像连体人一样,其中一个类小人的一个动作会让其他类小人做出一些反映,比如维护我的基本资料我会涉及到偏好的维护,但这不是必须的。NEO多次组合这些类小人关系,都不能达到目标,他这时第一次变得力不从心了,因为就连他现在也不能确定哪些变了会影响哪些类行为

NEO的师傅知道这件事之后专程抽了一个周末去看望他,指出了NEO的程序中没有将类的职责分离的清晰明确,这时NEO的师傅建议他大动手术把这个连体人进行分离,这个连体人已经长成了一起了,其中血脉盘根错节,进行分离不是一件易事,手术刀一不小心就会照成大出血.....

其实我们学过设计模式也知道,我们把系统中的每一个类,比喻成系统中需要顶一项职责的人,当我们设计这些类小人的时候就设计成连体人,那么我们就无法单独调用某一个类小人,干一件只属于他的事情了,牵一发而动全身。所以建议在设计类小人的时候,反复问自己这个类小人的职责应不应该包含这个职责??在出现连体类小人的苗头的时候,就进行手术分离,不仅风险小而且很快就完成了。。。。

时间: 2024-11-16 23:38:18

NEO的程序中过分亲密的类关系的相关文章

MFC CButtonST 在你的程序中如何使用CButtonST类

http://www.vckbase.com/module/articleContent.php?id=1135 首先在你的工程中加入如下文件: 1 2 BtnST.h BtnST.cpp 从v3.5版本开始,CButtonST支持使用BCMenu类创建菜单.为了能够使用BCMenu,你必须在 BtnST.h中加入下面二行: 1 2 #define BTNST_USE_BCMENU #include "BCMenu.h" 当然,你也必须在你的工程文件中加入下面的头文件: 1 2 BCM

vc控制台程序中如何使用cstring类的函数,头文件怎么包含?

1.project->setting->general 里的Microsoft Foundmation class选择“Use MFC in a Shared DLL”,再包含<afx.h>就行了.2.直接include <afx.h>3.#include <atlstr.h>

一个自己主动依据xcode中的objective-c代码生成类关系图的神器

https://github.com/kimsungwhee/KSHObjcUML 安装方法: 1.下载项目 2.执行 3.会又一次开启一个新的xcode 4.选择一个项目,点击 Objc-UML 会自己主动生成并打开生成的类图. 效果图不上了.用用试试.

在.NET Core控制台应用程序中使用强类型配置

想象一下,你写一个控制台应用程序,你想要从配置文件中以强类型方式读取配置. .NET Core 可以帮助我们解决. 通常我会在ASP.NET Core MVC中演示,但简单起见,只在控制台应用程序中演示. 让我们创建两个配置类,用于保存应用程序和模块名称. public class MySettings { public string ApplicationName { get; set; } } public class MyModuleSettings { public string Mod

【VC++学习笔记四】MFC应用程序中框架类的获取

一.文档类中 获取视图: 先获取主窗体,在根据主窗体获取视图 pMain->GetActiveDocument();注意类型转换 由于文档中可能包含多个视图,可以按照下面函数获取: CView*   CTestDoc::GetView(CRuntimeClass*   pClass) { CView*  pView; POSITION   pos=GetFirstViewPosition(); while(pos!=NULL) { pView=GetNextView(pos); if(!pVie

对类HelloWorld程序中添加一个MessageBox弹窗

对类HelloWorld程序中添加一个MessageBox弹窗 分析: 任一程序运行的时候都会加载kernel32.dll的,但MessageBoxA()这个API却是在user32.dll中的.所以在HelloWorld.exe中是没办法直接添加MessageBoxA()的调用. 不过好在有kernel32.dll,其中有两个API可以解决user32.dll没加载的问题,分别是LoadLibraryA(filename)和GetProcAddress(hModule, 函数名). 操作: 清

在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM

题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在"D:\java"文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 myPackage 包中创建一个YMD类,该类具有计算今年的年份.可以输出一个带有年月日的字符串的功能.设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名.年龄.出生日期.程序使用YMD的方法来计算年龄. 主要考包的运用 用到java.util.Calendar

程序中数据库的操作历史和对数据库操作的实体类注意事项

稍微了解一下程序中数据库操作历史吧! 1.首先是JDBC连接 2.c3p0 3.JPA JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 4.hibernate 实现了全自动的ORM(对象关系映射) 数据持久化:用户只需要操作对象即可,内部将对象最终转化为sql. 结果集映射:将sql执行后的结果自动的映射为对象 缺点: 耗费内存 会形成冗余的sql,执行的效率较低

在Android程序中使用已有的SQLite数据库

已经将这篇文章迁移至 Code问答,你也能够到这里查看这篇文章,请多多关注我的新技术博客CodeWenDa.com 在中文搜索中,没有找到一篇比較好的关于怎样在Android应用中使用自己事先创建好的数据库的文章,于是在谷歌上找到这篇英文文章,依照它的步骤,測试成功.决定把这篇文章大致的翻译一下,想看原文的能够点击这里:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ .