@
lihongjie02091.我认为“存储无关”决定架构优劣这是教条,并且有悖常理。
因为架构设计是服务于业务的,是不是允许系统设计依赖甚至鼓励依赖某个子系统(不管是持久化层还是你这里说更具体的“存储”这样的实现)的特征以便使系统容易具有其它优势,这根本还是业务需求说了算。
而且,强制要求先划分出存储还可能使实现容易违反一些其它更一般的普遍原则,比如 Principle of least privilege。
2.决定存储在哪里实现本身就是需要设计决策确定的一个问题,不能总是简单地排除出业务之外。
3.更一般地,数据库实际上不过是存储(或者持久化层)的一种实现。预先要求依赖某种数据库也是应该在普遍的架构设计中避免的——只不过这个主题的题设已经限定了数据库这个背景而已。
4.设计是需求的解。你的“高于需求”的理念不符合工程上一般意义的认知,这个矛盾看来需要你在落实设计之前解决。
5.设计的变化不一定成问题,但是为了变化付出太大的成本可能成问题。(另外,明确架构设计的一个作用就是为了避免这种成本太大。)不是任意的变化都应该是被无条件接受的。
6.你似乎认为测试数据库总是困难的,测试别的模块总是比测试数据库简单。不过事实上恐怕未必总是如此。
的确有几种强行让业务逻辑看起来总是更容易测试的设计套路,但是因为会限制表达能力,并不是每个业务领域都允许这样。
7.这点原则上我同意你的意见,虽然严格来讲测试业务逻辑不总是单元测试,这是和这里内容没有直接关系的次要话题。我的提法有些不够清楚,原意是指整个系统中的其它模块。