最近我发现自己能够解释我写给我公司喜欢雇用的两位候选人的(内部)申请,以协助维护和添加次要function。 这是我写的第一个“制作”应用程序,它有45k的LOC,我花了将近两年的“独立”开发。 我还很年轻(18),并从头开始编写应用程序,同时作为离开公司的前开发人员的替身。 在devise这种尺寸的应用程序方面没有经验,我尝试使用常见的体系结构和devise模式。 今天,我知道我已经做了一些严重的过度工程,例如,使用断开连接的变更跟踪架构,而不是工作单元模式,所select的ORM已经实现了。 我可能永远不必去“真正的”三层。 两位候选人都有10年以上的内部应用开发背景和相关平台。 虽然年龄只有他们的一半,没有经验,但我尊重他们的意见。 当我向他们解释应用程序架构时,评论的内容大致如下: 呃,没有人会付钱给我做这样的事情,我必须把事情做完 坚持框架做什么,不要使用花哨的图书馆/技术 不要包装框架代码。 在团队中,每个人都会自己写封装代码。 你正在使用.NET 3.5? 那么,我们正在使用2.0。 那LINQ的东西给我买什么? 所有这些查询组合和投影似乎太复杂了。 现在我在问自己: 我是一名build筑宇航员吗? 我怎么知道我在build筑方面太过分了? 什么是过度工程的常见症状?
听着Scott Hanselman对Stack Overflow团队的采访( 第1部分和第2 部分 ),他坚持认为SQL服务器和应用程序服务器应该在不同的机器上。 这只是为了确保如果一台服务器被攻破,两个系统都不可访问? 安全问题是否超过了两台服务器的复杂性(额外的成本,两者之间的专用networking连接,更多的维护等),特别是对于一个小型应用程序,哪个部件都没有使用太多的CPU或内存? 即使有两台服务器,一台服务器被攻破,攻击者仍然可能会造成严重的破坏,无论是删除数据库,还是搞乱应用程序代码。 如果性能不是问题,为什么会这么大?