锁定老帖子 主题:关于应用层次设计的讨论
精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-11
devroller2 写道 s929498110 写道 devroller2 写道 谁说一个手表、一个电梯就不分层了,只是分层的范围大小、可见性、个人的理解不同而已。比如电梯也有控制系统,这个也是属于一层;再比如手表的外壳也属于一层,每个齿轮大小规定也属于分层思想的应用。
分层数量。。。 分层细化程度。。。 我从来没说完全抛弃分层,只是不喜欢过度的分层和不合时宜的分层。 哎, 纠结。 我的核心思想就是Java里面开发Web应用用到的分层开发大型系统很好,但是其他许多时候就属于过度封装和分层。比如一个小企业网站你搞各种dao接口、dao实现、service接口、service实现、model等等。 一整套下来得几百个类,其中大部分还是空壳。有什么用啊? 小企业网站也要分层吧,apache的博客系统 Roller 功能不多,应该属于中小吧,但人家还是不是照样分层。我正在应用Roller做二次开发,效果很好。 建议有时间研究一下开源软件,相对其他开源系统,这个Roller属于比较容易上手的。看看我们在开发中写的代码和人家有什么不一样。 哥, 我没说不分层啊。 基本的mvc还是需要的, 只是一个小网站弄一大堆Dao接口,Dao impl,Service接口,Service imple合适吗。 说得越多越扯得远,我感觉我的意思被曲解了,万事无绝对,我不会说“完全不分层”的。。。 不说了 |
|
返回顶楼 | |
发表时间:2012-04-11
最后修改:2012-04-11
姐去面试,跟面试官说姐用的是第二种设计,面试官立即跟姐翻脸,可见面试官是很不合格的,为什么面试姐的面试官都是这样的,有时去面试跟吵架一样,姐找不到工作。。。。
|
|
返回顶楼 | |
发表时间:2012-04-11
superyang 写道 姐去面试,跟面试官说姐用的是第二种设计,面试官立即跟姐翻脸,可见面试官是很不合格的,为什么面试姐的面试官都是这样的,有时去面试跟吵架一样,姐找不到工作。。。。
呵呵,吵架!是争论吧,我觉得敢于跟面试官争论技术问题的人应该不差。我面试别人,一般只问类似此贴的问题,能说个1、2、3来,并且有非常深入的体会,就差不多了。不会去问具体技术的问题,如果能对此类问题有个认真的思考的话,技术学起来应该差不到哪里去。另外一个是对工作的态度,当然这个不好把握,被面试者都说自己态度好,是不是这样还真收才知道。 |
|
返回顶楼 | |
发表时间:2012-04-11
superyang 写道 姐去面试,跟面试官说姐用的是第二种设计,面试官立即跟姐翻脸,可见面试官是很不合格的,为什么面试姐的面试官都是这样的,有时去面试跟吵架一样,姐找不到工作。。。。
这样的面试官,确实很不合格。 |
|
返回顶楼 | |
发表时间:2012-04-11
ericchi 写道 s929498110 写道 devroller2 写道 谁说一个手表、一个电梯就不分层了,只是分层的范围大小、可见性、个人的理解不同而已。比如电梯也有控制系统,这个也是属于一层;再比如手表的外壳也属于一层,每个齿轮大小规定也属于分层思想的应用。
分层数量。。。 分层细化程度。。。 我从来没说完全抛弃分层,只是不喜欢过度的分层和不合时宜的分层。 哎, 纠结。 我的核心思想就是Java里面开发Web应用用到的分层开发大型系统很好,但是其他许多时候就属于过度封装和分层。比如一个小企业网站你搞各种dao接口、dao实现、service接口、service实现、model等等。 一整套下来得几百个类,其中大部分还是空壳。有什么用啊? 恩,过度设计和设计不足的争论。。呵呵 你只是不喜欢那么多的空类而已,可能你的业务逻辑太简单了吧,我们的项目很少有空的,当然我们是三流公司可能设计的比较挫,求指导。 |
|
返回顶楼 | |
发表时间:2012-04-11
最后修改:2012-04-11
分层的主要目的是解耦,也包括内聚(相关类聚合在一个包中/模块中):
1、共性抽象是必要的,如CRUD。 2、如你开发个用完就扔的功能,则可以直接写具体类(控制器类、服务类、Dao类),无需定义接口,也没有必要定义接口,因为只有你再用,我认为是模块内聚的。 3、如果你需要对外提供服务,则应该定义且必须定义接口,接口就是契约,方便交流和测试,我认为这里主要为了解耦(服务消费者不需要知道服务是如何生产的)。 因此项目不管大小,抽象共性是必须,然后考虑高内聚(自己人使用),当需要为提供服务(许多人使用)时考虑低耦合。即项目大小不是绝对因素。 即实际项目开发可以这样: 1、自己人使用(模块内),全部使用具体类,不定义接口; 2、如果别人想用你(其他模块),你提供一个接口,只暴露需要的功能(窄接口)。 |
|
返回顶楼 | |
发表时间:2012-04-11
ls已经是双钻级别,这个成长速度值得各位学习的,呵呵
|
|
返回顶楼 | |
发表时间:2012-04-11
jinnianshilongnian 写道 分层的主要目的是解耦,也包括内聚(相关类聚合在一个包中/模块中):
1、共性抽象是必要的,如CRUD。 2、如你开发个用完就扔的功能,则可以直接写具体类(控制器类、服务类、Dao类),无需定义接口,也没有必要定义接口,因为只有你再用,我认为是模块内聚的。 3、如果你需要对外提供服务,则应该定义且必须定义接口,接口就是契约,方便交流和测试,我认为这里主要为了解耦(服务消费者不需要知道服务是如何生产的)。 因此项目不管大小,抽象共性是必须,然后考虑高内聚(自己人使用),当需要为提供服务(许多人使用)时考虑低耦合。即项目大小不是绝对因素。 即实际项目开发可以这样: 1、自己人使用(模块内),全部使用具体类,不定义接口; 2、如果别人想用你(其他模块),你提供一个接口,只暴露需要的功能(窄接口)。 非常感谢,完全同意您的观点。 模块内内聚,模块间低耦合。 模块的划分,依据业务模型抽象。这样的设计,能够保证模块间依赖尽可能的小,一个模块内的变化尽量少的影响其他模块;一个模块能够单独的提供一类的服务,便于模块的独立,创造更大的伸缩空间。由于模块的规模相对系统来说,也比较小,因此一个模块的维护性更强,整个系统也更稳固。 不知我这样理解是否正确? |
|
返回顶楼 | |
发表时间:2012-04-12
ericchi 写道 jinnianshilongnian 写道 分层的主要目的是解耦,也包括内聚(相关类聚合在一个包中/模块中):
1、共性抽象是必要的,如CRUD。 2、如你开发个用完就扔的功能,则可以直接写具体类(控制器类、服务类、Dao类),无需定义接口,也没有必要定义接口,因为只有你再用,我认为是模块内聚的。 3、如果你需要对外提供服务,则应该定义且必须定义接口,接口就是契约,方便交流和测试,我认为这里主要为了解耦(服务消费者不需要知道服务是如何生产的)。 因此项目不管大小,抽象共性是必须,然后考虑高内聚(自己人使用),当需要为提供服务(许多人使用)时考虑低耦合。即项目大小不是绝对因素。 即实际项目开发可以这样: 1、自己人使用(模块内),全部使用具体类,不定义接口; 2、如果别人想用你(其他模块),你提供一个接口,只暴露需要的功能(窄接口)。 非常感谢,完全同意您的观点。 模块内内聚,模块间低耦合。 模块的划分,依据业务模型抽象。这样的设计,能够保证模块间依赖尽可能的小,一个模块内的变化尽量少的影响其他模块;一个模块能够单独的提供一类的服务,便于模块的独立,创造更大的伸缩空间。由于模块的规模相对系统来说,也比较小,因此一个模块的维护性更强,整个系统也更稳固。 不知我这样理解是否正确? 高内聚,低耦合是系统设计的灵魂,那么如何做到这点呢? 那就得有6大设计原则来保证了 |
|
返回顶楼 | |
发表时间:2012-04-12
KimHo 写道 ericchi 写道 jinnianshilongnian 写道 分层的主要目的是解耦,也包括内聚(相关类聚合在一个包中/模块中):
1、共性抽象是必要的,如CRUD。 2、如你开发个用完就扔的功能,则可以直接写具体类(控制器类、服务类、Dao类),无需定义接口,也没有必要定义接口,因为只有你再用,我认为是模块内聚的。 3、如果你需要对外提供服务,则应该定义且必须定义接口,接口就是契约,方便交流和测试,我认为这里主要为了解耦(服务消费者不需要知道服务是如何生产的)。 因此项目不管大小,抽象共性是必须,然后考虑高内聚(自己人使用),当需要为提供服务(许多人使用)时考虑低耦合。即项目大小不是绝对因素。 即实际项目开发可以这样: 1、自己人使用(模块内),全部使用具体类,不定义接口; 2、如果别人想用你(其他模块),你提供一个接口,只暴露需要的功能(窄接口)。 非常感谢,完全同意您的观点。 模块内内聚,模块间低耦合。 模块的划分,依据业务模型抽象。这样的设计,能够保证模块间依赖尽可能的小,一个模块内的变化尽量少的影响其他模块;一个模块能够单独的提供一类的服务,便于模块的独立,创造更大的伸缩空间。由于模块的规模相对系统来说,也比较小,因此一个模块的维护性更强,整个系统也更稳固。 不知我这样理解是否正确? 高内聚,低耦合是系统设计的灵魂,那么如何做到这点呢? 那就得有6大设计原则来保证了 如何做到高内聚,低耦合,我的理解是设计原则可以保持模块,而如何保持层于层之间的高内聚,低耦合,应该从更高的领域来看待,mvc就是一个很好的例子。 因为对某些个系统做了一些个假设,认为不需要暴露接口,而系统的生命期内,假设是否成立,没有人能够验证,也更加没有人能够保证! 在这种情况下,很多公司就开始使用第二种方式,当需要暴露接口的时候,代码需要大幅度的调整,并且可能导致层次间的耦合性提高! 所以,为什么mvc会得到很多人的赞誉,为什么很多人会自以为是的再mvc上做裁剪! 我想说,当你裁剪一种方式的时候,是否可以充分的验证下,裁剪的假设,更好的评估下项目的制约因素。 |
|
返回顶楼 | |