对于#1,这个问题有很多方面。一些想法可能会帮助您思考:
- 部署您的应用程序:使您的应用程序版本之间的部署和升级变得简单。尝试将其作为单个操作进行,而不是手动手动升级不同的部分。正如 Darin Dimitrov 所提到的,您可以研究像 Web 部署包这样的技术,尤其是在 Visual Studio 2012 中,它将具有增量数据库发布(在 VS2010 中,数据库是非增量的,因此没有真正的“更新”故事)。降低部署成本,以便他们能够负担得起更频繁的升级(不是您的产品成本,而是为保持系统更新和运行而获得报酬的人的开销)。
- 考虑在 Internet 和 Intranet 上运行之间的差异:例如,Internet 上的身份验证通常使用基于表单的身份验证来完成。在 Intranet 上,您可能需要考虑支持 Windows 身份验证,以便为企业用户提供无缝登录体验。这应该会影响您的设计,以允许在您的部署之间进行模块化身份验证。
- 企业对新技术的采用可能比您想要的要慢:您使用的是最新最好的 (ASP.NET 4.5/MVC4)。有些公司现在或几年后可能还没有准备好部署它。考虑一下您是否可以使用较旧的、成熟的技术,例如 .NET 4 - 已经出现了几年,它已经得到了一定程度的证明并被采用。
对于您的第二个问题,这取决于他们的 IT 愿意提供什么。许多公司站点在安全的 LAN 中都有数据库,但可以从公共 Internet 访问 Web 服务器。这当然是一个很好理解的网络设计,但是根据您的应用程序中涉及的资产,您的客户可能会也可能不会同意它。这是一个商业决策。
对于#3,答案对于任何长期软件项目都是通用的。如果您想尽量减少麻烦,它必须是高质量和可维护的。
- 如果您只支持最后的 N 个版本,请明确说明。避免支持您在过去很久就修复的代码。考虑提供额外的支持或负担得起的升级,以让您的客户使用更新的(希望是更好的)版本。
- 请记住版本之间需要升级哪些组件。您的网络应用程序(显然),还有您的数据库架构以及您正在使用的任何依赖项或库。这与#1 的考虑基本相同。确保您有一个良好的升级和回滚计划。
- 最重要的是,测试,测试,测试。进行功能回归测试和安装/升级测试,并尝试尽可能多的可能性。