复用
最大化的复用必然导致可用性的复杂化。模块可复用,必然要求模块具有灵活性,而灵活性会导致复杂性提高。
如何处理复用性和可用性之间的平衡是一个复杂的问题,而这个问题跟依赖有关。
我们在复用方面已经做了大量的工作。今天我们有大量的框架可供选择,比如Web框架,ORM框架,安全框架等。这些框架主要解决的是横向的问题,即主要关注基础设施和样例代码,但是对垂直的业务问题缺乏有效的解决方案。
粒度指的是系统分解为部分的程度。粗粒度的模块比细粒度的模块具有更丰富的行为。
粗粒度的模块更易于使用,而细粒度的模块更易于复用
量级
量级指的是一个模块依赖于环境的程度
重量级模块依赖于其操作环境,而轻量级模块尽量避免这些依赖。
重量级模块更易于复用,而轻量级模块更易于使用。
比如一个可以运行在多个环境下的模块,必然要求把环境相关的依赖从代码转移到配置中去。这样模块复用性更好,但是在使用时就需要为对模块进行配置以适应特定的运行环境,可用性上就更为复杂了。
粒度和量级是考虑复用性和可用性的关键因素。
模块弹性
通过细粒度的模块更容易识别系统变化的影响,但是过于轻量级和细粒度的模块会使得模块以及依赖的增多,使得系统更难使用。
通常情况下,逻辑设计影响可扩展性,而物理设计影响可用性和复用性。
模块化通常可以驱动类设计的决策