作者yauhh (哟)
看板Programming
标题Re: [问题] 低耦合 高内聚?
时间Thu Jan 19 21:56:26 2012
※ 引述《Elly (●A利 ●A你)》之铭言:
: 常听到IT人在说低耦合,高内聚,小妹我也希望能作到如此...
: 但以我一个初学者,实在很难以理解,到底要如何实作呢?
工作一阵子的人说自己初学者,教他人情何以堪 (:
: 最近,我练习作一个client-server-db架构的底层,
: 以我一个初学者的想法,
: 当然就是作一个Base Form, 让所有表单来继承...
蛮了解你所讲的方式; 我也做过同样的事情.
http://en.wikipedia.org/wiki/Coupling_(computer_programming)
上面网页中指出OOP有subclass coupling,那当然,子类一定是父类的副本.
像base-form这种作法的成本相当高,一张表单怎麽会是另一张表单的子类呢?
: 我把每个视窗都会出现的新增、修改、审核、删除、
: 取消删除、退回、清除画面....等按钮都拉一拉,
: 以及中间放一个panel,加以配色、排版後,
: 再加上一些属性:ex.上述按钮各要呼叫哪些server端的method...等,
: 然後再注册上述按钮的事件,
每一页都用到若干项物件,我觉得应该是有一组核心资料用来表达表单的包含物,
然後有个renderer负责从核心资料展开成可见的表单.
而这样的设计,在一般的SDK中都是这样了,常见是用XML定义一份表单的成员.
: 在事件中去呼叫那些属性设好的Method,
: 当然...我还没能作到让继承的表单什麽code都不用写,只要设一设就可以动,
: 因为每个表单总有它特别要处理的地方,
: 像是输入的栏位,都要个别再拉,个别依状况处理,
: 所以我又在Base Form中所有我注册事件中
: 呼叫我为它们加上的一个[可override的Method],
: 让继承表单可以override实作内容...
: 另外我也花了不少时间继承开发工具内建的输入元件,
: 像是TextBox, Grid, ComboBox等等,再为他们加上一些功能
: 作了很久之後,
: 我觉得...好乱呀XD....
所以,我觉得你应该关注的是内聚:
http://en.wikipedia.org/wiki/Cohesion_(computer_science)
内聚是指一份程式尽量只关注一件事情.
至於以上所指的base-form, extended-form那种设计,你应该要看是要整理哪些功能.
哪些功能很像,有很明显的父子关系,才有这种继承方式.
至於一个表单和另一个表单,怎麽看都比较像是二者同样从一个类型中具体化而来,
而不是这个表单是那个表单的子类.
: 所以我想到了IT人常说的,
: 要作低耦合+高内聚,
: 我悟性不太好,又再去google了好几次...
: 猜想应该是不要作一个Base Form来继承,
: 而是将Base Form要作的事,都提出来写成很多个小小的静态函数,
: 再让其它Form呼叫这些静态函数就好了吗?
: 但这样感觉好像每个Form都会写差不多code耶~有点像在复制贴上...
: 我实在很疑惑@@?
: 有人能教教我吗?感恩啊~
其实你在做form generator. 也许可以翻翻编译程式方面的资料,再想想看
怎麽设计比较有意思.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.65.42
※ 编辑: yauhh 来自: 61.231.65.42 (01/19 21:58)
1F:推 Elly:歹势~我仍不是很懂,原本我以前公司是都用user 111.184.1.200 01/19 22:23
2F:→ Elly:control当base form的内容, 我们再继承来加东 111.184.1.200 01/19 22:23
3F:→ Elly:西, 然後主程式run起来,再将该user control给 111.184.1.200 01/19 22:23
4F:→ Elly:dock.fill在它所即时new出的form内,所以我才 111.184.1.200 01/19 22:24
5F:→ Elly:想说直接作在base form继承,那你说不该form 111.184.1.200 01/19 22:24
6F:→ Elly:那是否我还是用user control好呢@@? 111.184.1.200 01/19 22:25
7F:→ yauhh:那是很可怕的作法,一个表单或一个control 61.231.65.42 01/19 22:37
8F:→ yauhh:可能根本不藕合.一个control就像一个AP一样. 61.231.65.42 01/19 22:38
9F:→ yauhh:一个物件类别如何定义,可以多读谈OO的书来 61.231.65.42 01/19 22:40
10F:→ yauhh:悟. 我觉得那种思考要领算是哲学. 61.231.65.42 01/19 22:41
11F:推 Elly:@@嗯....有点深奥...我要想一下 111.184.1.200 01/19 22:44
12F:→ Elly:3Q^^ 111.184.1.200 01/19 22:44