系统架构39问
架构视角面面观
架构一个系统不是一件简单的事,需要考虑到的事情也特别的多。下面我列举一些常见的问题,以抛砖引玉。
- 是否在不断的学习新技术、新名词、生怕落伍?(WCF、WF、WPF、MVC、EF、WebApi、Spring、Castle、Unity、Autofac、NInject、AOP等)
- UI层代码平均是多少行?(WEBForm页面、Winform等页面)
- 业务层代码量平均是多少?
- 数据访问层代码量平均是多少?
- 存储过程、SQL、触发器的代码量是多少?
- 系统中有多少配置文件,配置文件的行数是多少?繁多的配置能否减少吗?是否都很必要呀?
- 代码量是否作为项目的考核指标?
- 项目中的代码是否有很多相似的代码或者冗余的代码?
- 项目的业务逻辑分布如何(UI层百分比是多少、业务层百分比是多少、数据访问层百分比是多少、存储过程触发器等百分比是多少)
- 开发人员大部分的开发时间是花在什么地方?前段界面、业务逻辑、数据访问层、存储过程、SQL语句、Bug修改。
- 开发时间、Bug修复时间的比例是多少?
- 开发人员是否经常做自动化单元测试(NUnit、MSUnit等)?
- 是否支持AOP扩展(事务处理、权限认证、监控日志等)?
- 数据校验怎么处理的?
- 是否支持国际化?
- 业务逻辑是否可以近乎零配置的方式,发布成WebService、Rest等类型的服务?支持各种终端吗?
- UI前端不用改任何代码,只需要简短几行配置把业务逻辑的进程内调用转化为分布式调用吗?
- 是否觉得MVC的控制器的代码都很相似,又无法进行很好的重构,如果能和业务逻辑统一起来该多好?
- 业务逻辑经过简短配置能否完成从嵌入式部署到分布式部署?并且业务逻辑与分布式部署完全松耦合?并且支持多种协议和数据格式?
- 业务逻辑该如何进行垂直分割和水平分割呢?
- 是否在为和其它系统的接口对接发愁呢?
- 如果页面都是静态化该多好?通过Ajax异步访问领域逻辑多好?
- WebPage能像MVC的ViewPage那样支持泛型节约不少代码量的?
- WebPage能支持DI注入那该多好?
- WebPage能像Mvc那样不用CodeBehind,禁用ViewState,不用任何服务器端控件、UI的响应不通过服务器控件的事件绑 定, 可以自动路由到特定的方法,并且把表单参数和查询字符串的参数以及路由数据自动绑定到Action的方法列表,是不是很期待?
- 你的领域逻辑是否被UI前端绑架了?
- 你的领域逻辑是否被Asp.net的Session、Cookie、Cache等东东绑架?
- 你的领域逻辑是否被MVC或者WebApi的什么什么ActionResult.ControllerContext,ControllerBase,ApiController 等绑架?
- 你的领域逻辑是否被WCF的数据契约、服务契约、操作契约以及繁琐的ABC配置所绑架?
- 你的领域逻辑是否被WebService、Remoting等分布式架构所绑架?
- 你的领域逻辑是否被Ado.net 所绑架(强类型的SqlConnection等)?
- 你的领域逻辑是否被ORM所绑架(如EF、NHibernate等)?
- 你的领域逻辑是否被不支持多数据库所绑架?
- 你的领域逻辑是否很难支持多谢分离?
- 没有裸奔的领域逻辑是否该甩掉包袱开始裸奔呢?
- 你们的架构是否依赖核心人员?核心人员一旦离职等其它因素脱离该项目,其它人能否玩得转吗?
- 你们的架构能否可以做到项目的快速交付和实施吗?
- 你们的架构的稳定性、安全性、可扩展性、维护性、易用性如何?
- 你们的架构经过简短的培训能够让实习生很快上手吗?
上面的问题,不解决或者都解决对不同岗位的人有什么切身体会呢?
- 初级软件工程师?
- 中高级软件工程师?
- 技术经理?
- 项目经理?
- 架构师?
- 测试工程师?
- 客户?
- 领导?
我上面写了30多条个人日常工作中的点滴,但这也只是一个系统架构的一些方面而已。任何系统都是复杂的,我们需要考虑得更加周全,才能做出健壮的系统。
时间: 2024-10-05 12:22:49