程序员创业指南和企业应用程序构建 - 文章3
这是我将告诉您如何创办 SplendidCRM Software, Inc. 系列专栏的第三篇。
引言
这是我将告诉您如何创办 SplendidCRM Software, Inc. 系列专栏的第三篇。我希望我的创业经历能激励您。在我看来,创办一家公司可以是一次美妙的冒险。
第三篇文章
创办一家公司需要多少成本?不多。如果您已经有电脑,那就足够了。从法律角度来看,可以在网上花费 100 美元成立一家公司。如果您要成立一家非营利组织,那么公司实体类型就变得很简单。但是,作为一家小型企业,您很可能会选择 S 型公司或有限责任公司。我个人偏爱 S 型公司,但这可能与我的年龄和过往经验有关。值得一提的是,我的会计师偏爱有限责任公司。最好的办法是自己做研究。一个不错的起点是这里。
创办公司的真正成本是创建和交付您的第一个产品的成本。这意味着真正的成本是创建应用程序所需的软件以及测试应用程序所需的硬件。您需要精明地花钱。就开发软件而言,微软提供了许多免费的开发工具。如果您正在开发一项软件即服务(SaaS)解决方案,那么微软可以通过其 BizSpark 计划提供 Visual Studio 和 SQL Server 的免费生产许可证。您可以阅读BizSpark FAQ。如果您不符合 BizSpark 的资格,那么您的下一个最佳选择是Microsoft Action Pack Subscription (MAPS)。
BizSpark 和 Action Pack 许可证都提供 MSDN 订阅,其中包含大量软件。我们使用 MSDN 来获取各种最受欢迎语言版本的 Windows。我们已经在 Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008 甚至 Windows 7 上测试过 SplendidCRM。我们也在上述所有操作系统的 32 位和 64 位版本上测试过 SplendidCRM。此外,我们还测试过法语、意大利语、德语、西班牙语、葡萄牙语、中文和日文版本的 SplendidCRM。在您不熟悉的语言下安装 Windows 会花费一些精力,所以我们的技巧是同时运行英文安装。屏幕几乎相同,所以即使您不认识文字,也能理解提示的内容。
跨多个平台和多种语言测试应用程序的有趣之处在于,您会进行更多测试,并发现更多 bug。最终,您将获得一个更强大的应用程序。但是,面对如此庞大的测试矩阵,您需要充分利用虚拟化。我敢肯定您已经听说过虚拟化,但对于那些不了解的人来说,虚拟化允许您在一台服务器上运行多个操作系统。我们使用 VMware 已有 8 年以上,因此我们倾向于他们的 VMware Server 产品。您应该认真考虑 VMware Workstation 产品,因为它具有强大的快照功能。微软在 Windows Server 2008 中还推出了新的 Hyper-V 产品,但我们发现 VMware 更易于使用。因此,购买一台双处理器四核机器,配备 12G 内存和大量硬盘空间,您就可以同时运行大量虚拟机。
就计算机硬件而言,您不会得到任何免费的东西。购买硬件的真正窍门是以出口价购买新硬件。在 SplendidCRM Software,我们是 HP 硬件的忠实粉丝;我们拥有大量 ProLiant 服务器和 HP 工作站。所有硬件都是以折扣价购买的,折扣幅度为 40% 至 50%。您可以直接从 HP 购买翻新硬件,但这种硬件通常只有 1 年保修。当您从经销商处购买硬件时,您将获得全新的机器保修,服务器和工作站通常为 3 年。因此,请查看 PC Connection、CDW 和 Provantage 的出口店。eBay 也是一个选择,但我们在认证经销商那里购买硬件的经验更好,他们的退货政策没有重新进货费。
以上是我本篇文章所有的商业建议。现在,请准备好迎接一个突兀的编程话题的转变。
存储过程
SplendidCRM 大量依赖 SQL 存储过程和 SQL 视图。我相信您可能想知道我为什么做出这个选择。如果您在 Bing 上搜索“存储过程与动态 SQL”,您会看到一个持续多年的激烈争论。列表顶部是 Andres Aguiar 的博客。虽然我无意增加这场辩论,但我认为记录我在 SplendidCRM 中如何以及为何使用存储过程很有用。
首先,我先设定一些基本规则。每当我们从数据库中提取数据时,我们都使用 SQL 视图。每当我们向数据库中写入数据时,我们都使用 SQL 存储过程。一般而言,我们将业务逻辑放在存储过程和视图中。这些规则也有一些罕见的例外,例如在使用存储过程读取 IMAGE 或 BLOB 数据时,或者在处理自定义字段时使用直接 UPDATE 语句。
将业务逻辑放在数据库中的主要动机是通过减少网络流量并让数据库发挥其最大作用来提高性能。关系型数据库就是关于关系,所以定义关系的最佳场所是 SQL 视图,其中关系可以在数据库的语言中定义。有些人认为将业务逻辑放在数据库中绝不是一个好主意,对于这些人,我将 SplendidCRM 作为适当时机的例子。
使用 SQL 存储过程和 SQL 视图的另一个关键动机是允许每个数据库平台拥有自己的实现。SplendidCRM 目前支持以下数据库平台:SQL Server、Oracle、PostgreSQL、MySQL 和 DB2。然后,这些过程和视图就成为数据访问层,其定义在逻辑和数据之间提供了必要的隔离。虽然 C# 中有一些代码可以处理数据库平台之间的差异,但主要差异是由一组单独的存储过程和视图来处理的。
既然数据库已完全抽象化,那么有趣的环节就开始了。我们可以查询数据库的元数据,并围绕所有存储过程创建 C# 包装器。C# 包装器提供了强类型函数,可以确保始终使用正确的数据类型。而且,如果数据类型发生更改,C# 编译器将在编译时生成错误,而不是在运行时。我们在导入数据时也使用此元数据。它使我们无需管理自己的可用字段列表,就能确保使用正确的字段名称。SQL 视图提供了类似的元数据,并允许我们动态提供可用字段列表,以便我们能为用户提供报告生成器。
关于存储过程与动态 SQL 最大的争论之一与性能有关。我能提供的最佳证据是 SplendidCRM 和 SugarCRM 之间的比较。我们发现使用存储过程的 SplendidCRM 比使用动态 SQL 的 SugarCRM 快一倍。如果您不相信我,我鼓励您自己进行实验。虽然 SugarCRM 已针对 LAMP 堆栈进行了优化,但您可以在 Windows Server 上使用 Microsoft SQL Server 数据库安装 SugarCRM 社区版。这样就可以排除操作系统和数据库平台是 SplendidCRM 如此快的原因。虽然有些人可能认为 C# 比 PHP 快,但我将假设它们的速度相当。这种假设只剩下架构上的差异,然后结论就证明了我的观点,即存储过程更好。
希望您喜欢本系列文章的第三篇。请关注几周后发布的第四篇文章。
历史
- 2009 年 6 月 22 日:首次发布