我的问题不是技术问题。这更像是一种哲学而非个人偏好。我正在设计和开发一个应用程序(web +桌面),这只是我想到的,并且想知道你们(程序员和设计师)是否曾经遇到过这个问题:
一些设计人员相信制作将会运行3 - 5年的应用程序,并且任何变更都将反映在他们身上,而无需采用系统核心更改。作为一名程序员,我知道这是从不的情况。确实发生了小的化妆品变化,但通常它们会在一两年后消失,随着时间的推移,将会发生变化,需要进行核心更改,最终您将进行新的应用程序。
鉴于技术的快节奏变化,设计应用程序5年后,相当荒谬,恕我直言。嗯,我的意思是不设计,但这个应用程序将运行5年的想法,并认为我们不需要创建一个新的,我认为生活在一个愚人的天堂。我的意思是,其他程序员,大多数关键任务或基本的小型应用程序,无论如何都会在几年后重新制作/重新组织/重新组织/重新编码。
所以我的问题是为什么要保持这种完美的应用程序运行十年的态度。真的很愚蠢,因为你知道技术每年都会发生变化;新框架,新方法,新技术将出现,您的客户将需要它们。所以,如果你原谅我使用这个短语,WTF就是重点?
我一直告诉我的设计师,应用程序将在几年后重新设计,没有必要尝试从@ss拍摄照明,因为它永远不会。没有完美的应用程序。
我希望你们得到我的漂移。你们有同样的感受吗? BTW我从事软件编程业务已有7年了。如果你真的想到它,你真的认为Facebook将保持相同的5年,确保设计每年都会改变,以保持“时髦”,但核心将改变每一个许多年。我很清楚这一点。我是偏执还是什么?请告诉我其他程序员和我在同一条路上。任何人?
答案 0 :(得分:9)
我的方法是设计变革。这意味着我可以编写最易维护的代码,保持松散耦合和模块化,尽可能以标准方式执行操作,以便其他开发人员可以快速获取代码等。
我通常会为将来的数据库设计付出更多努力,因为在很多情况下,代码更改可能会比代码更改困难得多。
答案 1 :(得分:5)
我曾在两家不同的公司工作,这些公司的软件产品已接近10年以上。尽管它们已经扩展了大量的新功能并且已经进行了许多面部提升,但是自第一次稳定发布以来,应用程序的核心基本上没有被触及。这可能不是典型的,但如果架构师足够熟练,那么系统可以构建为模块化和可扩展性,足以容纳惊人的增长。
答案 2 :(得分:4)
就个人而言,我绝不会设计任何类型的应用程序,假设它将在几年内被替换。通常,那些“更新”和“重写”被推迟,以便快速修复那些不想等待整个新应用程序的客户。确保需求发生变化,需要使用功能,但通常在当前迭代中需要它们。
我的意思是,有很多应用程序,语言和设计模式都有同样的想法,并且至今仍在使用。突然出现的是y2k bug。 70年代的程序员从未想过他们的代码会持续30年,而且肯定有人会在世纪之交之前将这些年份的值扩展到4个数字。我们都记得这种想法是如何产生的......
答案 3 :(得分:4)
“实现伟大计划的最大障碍是实现完美计划的梦想。”
我同意 - 设计一个完美的系统,可以优雅地适应每一个可能的未来变化,是徒劳的。每个成功的项目都需要权衡:建立灵活性,让您确信需要(或者无论如何都很容易做到);并且建立一些快速脏的代码,您认为灵活性/变更不太可能。如果你很好地分析系统并且客户很好地了解他们的需求/要求(并非总是如此),那么你至少在大多数时间都能获得这种平衡。
然而,整个系统将被一些新技术每3 - 5年更换一次的想法也是一个谬论。对于每个想要最新,最新,最性感的系统的客户,有5个客户不敢与他们的传统COM / VB / MS-Access /任何系统混淆(或无法替代)他们的意大利面条逻辑随意构建而不考虑可维护性,灵活性或可扩展性。你不想成为那个系统的一个建筑;如果你是,那么你对你的客户/雇主是一种伤害。
答案 4 :(得分:3)
我相信,如果系统的核心建立在多年来没有太大变化的原则上,那么系统从根本上不会有太大变化,大多数变化在初期都是美学上的。
迄今为止仍然存在的一些久经考验的原则是数据库规范化,代码模块化等等。
所以这取决于你定义的核心。对我来说,核心意味着系统的设计,如果做得好,将来可能不会发生太大变化。
答案 5 :(得分:3)
这取决于环境。我发现我们的内部企业应用程序在发布后的18个月内全面彻底检修(通常已退役)。这不是任何人的错 - 业务优先级发生变化,需求发生变化,新系统上线。同时其他系统运行很长时间。
我们当然不会开发任何应用程序,期望它很快就会退役但是有需要立即解决方案的业务需求,有时最好尽快将应用程序联机并最终用户手中尽可能。我们更新,迭代并确定下一个最佳步骤。
答案 6 :(得分:3)
数据和数据结构(通常)需要合法设计才能持续数十年。预计算法,用户界面和其他一切都会迅速发展。
如果您的数据代表法律文件,财务记录,您可能需要坚持数十年。
这也可以走极端。 50年内可能没有人会关心的数据子集,例如可能存储在数据库中的内存性能计数器。
答案 7 :(得分:3)
我记得James Kovac的一句话,我相信,在.Net Rocks的一个播客中,他将我们的行业描述为:
唯一不变的是
这就是为什么你应该设计灵活性,以便在变化到来时,在大多数情况下不可避免地*你将有一个更容易的工作适应/更新你的应用程序。这并不是说您不应该尝试以坚实的理由构建您的应用程序,但更重要的是拥有一个灵活的解决方案,您可以比第一次完美的解决方案轻松更改。
*我知道在许多银行中,人们仍在使用古老的应用程序,因为改变它们的风险太大而且他们根本没有专业知识来改变它们。
答案 8 :(得分:2)
嗯,我认为理想设计是完全正交的,但你必须接受它很少按照你设想的方式运作。如果你从未读过The Pragmatic Programmer,它会谈论很多关于未来验证代码的事情。