我正在为内部客户开发一个应用程序。其中一个要求是,它的开发方式可能会被出售给其他组织。该应用程序是一个筹款组织的跟踪应用程序,将管理他们的捐赠,捐赠者,参与者和事件。我已经知道我需要开发一个用于身份验证的插件架构(授权将在内部处理)并从外部目录派生人口统计数据。
该应用程序将基于ASP.NET/C#/Linq/SQL Server构建。在这一点上,我并不愿意支持替代数据库,但我想如果有必要,我可以在未来通过不同的Linq驱动程序执行此操作。
我迄今为止构建的所有Web应用程序都是自定义实现,因此我想知道是否还需要通过插件和/或配置项来解决其他问题。任何输入都会有所帮助。
感谢。
答案 0 :(得分:27)
我想提醒你不要试图制作“做一切”的框架。这是许多开发人员在尝试构建他们的前几个大众市场软件应用程序时常犯的错误。
您已有客户,他们可能会为该应用程序的初始版本提供资金。您需要尽可能快地提供客户所需的尽可能多的内容,否则在您开始考虑大众市场之前就会失败。
帮自己一个忙,并期望这是唯一一个会使用或购买该应用程序的客户。设计您的应用程序的方式与您过去设计的任何其他自定义应用程序完全相同。
为了将其扩展到其他客户,您需要做的就是尽可能地坚持使用asp.net的特性和功能,尽可能保持简单和精简,并尽可能减少“高级” “版本1.x的功能,你可以逃脱。
1.x将成为你的试验场。确保您提供的应用程序能够满足您的初始客户需要执行的操作,并确保它能够做得非常好。
如果您成功,并且1.x确实满足了您的初始客户的大部分要求,那么您将知道您的应用程序将满足您的任何客户的大部分需求。恭喜,您已经拥有了可行的商业市场应用程序!
需要注意的事项:
您真的需要支持多个数据库平台吗?当然,您可能有“某些”客户可能“更喜欢”MySql到SQL Server。只需更改一些配置选项或在安装程序中进行正确选择,您就会尝试编写一些可支持Oracle,MySQL,VistaDB,SQL Server等的神奇DAL。但事实是,这种“平台”中立性为您的设计增加了大量复杂性,并对您利用的功能施加了严重限制。像提供者设计模式这样的东西可能会让你觉得这种设计并不那么难......但你会错的。务实并设计您的应用程序,以便90%的潜在市场可以接受。特别是对于数据访问,通常可以肯定地说,愿意安装和运行ASP.NET应用程序的90%或更多市场也能够并且愿意使用SQLExpress或SQL Server。在大多数情况下,通过设计SQL服务器,您将节省更多的金钱和时间,而不是通过支持多个数据库进行额外的销售。
尽量避免通过在线管理工具配置“所有内容”。例如,您可能希望应用程序中的所有文本都可以通过管理工具进行配置。那很好,但也很贵。开发需要更长的时间,需要增加应用程序的范围,以包含您不需要的大量管理工具,这会使应用程序变得更加复杂,并且难以用于90%的客户不介意默认文字。
仔细考虑本地化。如果你认为你不会有一个庞大的国际市场坚持一种语言。本地化并不是太难,但它确实使代码的每个方面都变得复杂......并且在任何大小的应用程序中都会增加很多。我的经验法则是只针对我最初市场的语言。如果该应用程序对其他市场感兴趣,那么在我从版本1.0中收回一些现金并证明该应用程序首先具有可行的市场后,我回去并在版本2.x中进行本地化。但如果你知道你将使用多种语言或文化,那么从一开始就支持本地化。
对于1.0版,不要过多担心插入模块或花哨的服务API。如果你已经在可重用框架方面有很多经验,那么你可以在1.0版本中使用这些东西,但是如果你缺乏这种体系结构的经验,那么你将在版本1.x中浪费太多时间来处理这些功能。可能仍然会出错,并且无论如何都必须在版本2.x中进行重新设计。
确保该应用程序具有非常好的报告功能。对于您正在讨论的应用程序类型,这将决定应用程序是否甚至根本没有市场。您需要漂亮的报告,不仅可以在屏幕上进行排序/过滤,还可以打印。把你的金钱和时间放在门外。
答案 1 :(得分:4)
最重要的是以完全通用的方式设计它,即没有硬编码或嵌入的客户特定信息。
任何特定于客户的内容都必须通过元数据进行配置。如何执行此操作完全取决于您,但主要方法是通过XML,数据库或属性文件。
如果您以这种方式进行设计,它可以出售给任何数量的客户,每个客户都有自己的配置文件或数据。
答案 2 :(得分:2)
Abarax给出了一个很好的答案,我强调你应该考虑本地化 - 口语(英语,法语,德语等)和组织的语言,例如:有些地方可能称之为时间表,文件夹或工作单,如果一切都与他们一直称之为的东西不匹配,每个人都会抱怨,抱怨和发牢骚。
答案 3 :(得分:2)
如果您使用的是开源技术,请花一点时间将所有许可信息保存在一个位置。