随想:没有完美的架构,有舍有得

在过年的很多年我一直在追求一个完美的架构,系统对第三方组件没有强依赖,可替换。这么多年过去了,我在很多项目中尝试和实现了这个基本理念,具体表现在对IoC,ORM等等的抽象处理。有趣的是我发现不单是我有这种偏好,我发现身边很多工作多年的高级开发人员也同样有这种偏好。几年前在Travix开发API的时候,当时的某个架构师同样对IoC进行了抽象处理,实现了Unity,过去的很多年我对这种实现一直是站在赞同的一边。Umbraco V5中也同样看到了这个实现让我欣慰 :)。但慢慢的我发现有时不必要的抽象会给项目带来很多不必要的复杂度,牲牺了功能与特性,而且还无法完成真正意义上的可替换,何苦呢。具体的例子,比如ORM,抽象EntityFramework与NHibernate本身就是个伪命题,系统基本是不可能对ORM进行切换,而且很多实现还在IRepository中提供了IQueryable,两个ORM对IQueryable的支持差距还是很大,有一天你放弃了对ORM的抽象会发现一切是那么的美好。对IoC的抽象也同样是过度设计的表现,因为牺牲了很多具体IoC特有的功能,如Autofac。Orchard对IoC, ORM的强依赖在一定程度上也符合有舍有得的这个观点。

原文地址:https://www.cnblogs.com/zhangpengc/p/5138184.html