抽象是有成本的,所以抽象必须是有价值的,且价值要能cover成本,这个价值就是应对变化。不变化的东西自然就不必抽象。(当然实践中的问题主要在于,本来觉得不会变的东西后来变了……)
但是就我看来,你的问题并不是抽象和具体的问题——因为按你的描述,你对哪些东西是可变的(需要多态)是很清楚的——你的问题只是代码怎么组织,即CraftOneMat是放在Sys还是IBuildable。实际上CraftOneMat放到IBuildable并没有什么不同(排除编程语言特性限制)。
目前看来,你放在Sys是因为这样反映了你的团队职责划分。但其实因为CraftOneMat调用了IBuildable,所以其实CraftOneMat实质上也定义了IBuildable,除非CraftOneMat接口上还有其他和CraftOneMat无关的东西(但看上去不应该有)。所以在我看来,并没有什么差别。
由于CraftOneMat和IBuildable的定义本身是紧耦合的,所以我个人会比较倾向于G1,但CraftOneMat并不是作为接口方法,而是具体方法,且若你确定该具体方法的逻辑是不会变的,该方法应该是seal/final的。(若编程语言的接口不支持具体方法,改用抽象类即可。)至于团队的职责划分,该接口或抽象类归Sys的人维护,接口/抽象类的具体实现类归做物品的人即可。
以上想法谨供参考。
看需求,不要玄学.
没有需求的情况下,你想怎么折腾都行,开心就好。
但现实中有大量的需求,特别是非功能需求。这些需求会驱动设计落地的方案。比如“可维护性”/“可重用性”这个事情就和组织架构的具体形式有非常大的关系。对性能的要求会尽力避免过多的,无意义的分层和转换。对安全性的要求则会希望尽量的隔离,以及关数据存储和传输的加密。监控和数据收集的要求需要AOP那样注入的方式避免干扰业务代码。……
你不能拿着一堆积木倒推需求,然后说应该如何如何。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有