首页 > 代码库 > 系统架构39问

系统架构39问

系统架构39问

架构视角面面观

 

架构一个系统不是一件简单的事,需要考虑到的事情也特别的多。下面我列举一些常见的问题,以抛砖引玉。

  1. 是否在不断的学习新技术、新名词、生怕落伍?(WCF、WF、WPF、MVC、EF、WebApi、Spring、Castle、Unity、Autofac、NInject、AOP等)
  2. UI层代码平均是多少行?(WEBForm页面、Winform等页面)
  3. 业务层代码量平均是多少?
  4. 数据访问层代码量平均是多少?
  5. 存储过程、SQL、触发器的代码量是多少?
  6. 系统中有多少配置文件,配置文件的行数是多少?繁多的配置能否减少吗?是否都很必要呀?
  7. 代码量是否作为项目的考核指标?
  8. 项目中的代码是否有很多相似的代码或者冗余的代码?
  9. 项目的业务逻辑分布如何(UI层百分比是多少、业务层百分比是多少、数据访问层百分比是多少、存储过程触发器等百分比是多少)
  10. 开发人员大部分的开发时间是花在什么地方?前段界面、业务逻辑、数据访问层、存储过程、SQL语句、Bug修改。
  11. 开发时间、Bug修复时间的比例是多少?
  12. 开发人员是否经常做自动化单元测试(NUnit、MSUnit等)?
  13. 是否支持AOP扩展(事务处理、权限认证、监控日志等)?
  14. 数据校验怎么处理的?
  15. 是否支持国际化?
  16. 业务逻辑是否可以近乎零配置的方式,发布成WebService、Rest等类型的服务?支持各种终端吗?
  17. UI前端不用改任何代码,只需要简短几行配置把业务逻辑的进程内调用转化为分布式调用吗?
  18. 是否觉得MVC的控制器的代码都很相似,又无法进行很好的重构,如果能和业务逻辑统一起来该多好?
  19. 业务逻辑经过简短配置能否完成从嵌入式部署到分布式部署?并且业务逻辑与分布式部署完全松耦合?并且支持多种协议和数据格式?
  20. 业务逻辑该如何进行垂直分割和水平分割呢?
  21. 是否在为和其它系统的接口对接发愁呢?
  22. 如果页面都是静态化该多好?通过Ajax异步访问领域逻辑多好?
  23. WebPage能像MVC的ViewPage那样支持泛型节约不少代码量的?
  24. WebPage能支持DI注入那该多好?
  25. WebPage能像Mvc那样不用CodeBehind,禁用ViewState,不用任何服务器端控件、UI的响应不通过服务器控件的事件绑 定, 可以自动路由到特定的方法,并且把表单参数和查询字符串的参数以及路由数据自动绑定到Action的方法列表,是不是很期待?
  26. 你的领域逻辑是否被UI前端绑架了?
  27. 你的领域逻辑是否被Asp.net的Session、Cookie、Cache等东东绑架?
  28. 你的领域逻辑是否被MVC或者WebApi的什么什么ActionResult.ControllerContext,ControllerBase,ApiController 等绑架?
  29. 你的领域逻辑是否被WCF的数据契约、服务契约、操作契约以及繁琐的ABC配置所绑架?
  30. 你的领域逻辑是否被WebService、Remoting等分布式架构所绑架?
  31. 你的领域逻辑是否被Ado.net 所绑架(强类型的SqlConnection等)?
  32. 你的领域逻辑是否被ORM所绑架(如EF、NHibernate等)?
  33. 你的领域逻辑是否被不支持多数据库所绑架?
  34. 你的领域逻辑是否很难支持多谢分离?
  35. 没有裸奔的领域逻辑是否该甩掉包袱开始裸奔呢?
  36. 你们的架构是否依赖核心人员?核心人员一旦离职等其它因素脱离该项目,其它人能否玩得转吗?
  37. 你们的架构能否可以做到项目的快速交付和实施吗?
  38. 你们的架构的稳定性、安全性、可扩展性、维护性、易用性如何?
  39. 你们的架构经过简短的培训能够让实习生很快上手吗?

上面的问题,不解决或者都解决对不同岗位的人有什么切身体会呢?

  • 初级软件工程师?
  • 中高级软件工程师?
  • 技术经理?
  • 项目经理?
  • 架构师?
  • 测试工程师?
  • 客户?
  • 领导?

我上面写了30多条个人日常工作中的点滴,但这也只是一个系统架构的一些方面而已。任何系统都是复杂的,我们需要考虑得更加周全,才能做出健壮的系统。

系统架构39问