2011-05-25 51 views
0

我们在ASP.NET MVC中开发了简单的CRM应用程序。它适用于拥有少量用户帐户的单个组织。MVC C#CRM - 一个应用程序很多组织

我正在寻找简单的方法来使它与许多组织一起工作。我可以使用会员提供商提供的ApplicationId吗?每个组织都有自己的ApplicationId

但是这意味着数据库中的每一行也必须有ApplicationId,对不对?

请给点建议。也许有更好的方法?

+0

首先,您为什么称它为“ApplicationId”,而不是“CompanyId”或“OrganizationId”。除此之外,是的 - 你可能会为公司增加一张桌子,你必须在桌子上使用“CompanyId”。但是这会混合所有的数据。 – 2011-05-25 10:04:55

回答

1

不幸的是,对于“简单的方法”,你已经错过了巴士。因为简单的方法本来可以通过设计来实现这一点。将OwnerId包含在第一阶段的数据中并且使您的业务逻辑能够按照这种方式工作并不是那么重要。

目前“简单的方法”是重构所有数据和业务逻辑以包含OwnerId。在做这件事的同时,向前看。考虑一下“如果我们需要在未来支持这一点以及如何支持这一点”的情况,并通过设计为未来留出一些空间。你现在不需要完全实现所有的东西,但是你会发现,如果它的设计是按比例扩展的话,让你的应用程序变得容易。

什么来到ApplicationId,这是您的成员资格的内部ID提供了范围为每个应用程序的成员资格数据。我会远离那个逻辑出血到整个应用程序。请记住,验证您的Web用户并为其分配角色并通过角色授予他们权限是一个完全不同于数据所有权的过程。

在ASP.NET MVC中,您应该使用[Authorize]属性来确保某些用户或组可以执行某些操作,或者不能执行某些操作,同时确定哪些数据是其数据应该在数据本身中实现的。即使你要运行两个或更多的应用程序实例,它仍然是同一个应用程序。因此ApplicationId在这里不适用于您的数据范围。

但是,假设您的CRM在将来不会那么小,并且显而易见的是您的初始组织或后面的一个组织希望允许其客户登录并检查其数据,您将需要建立另一个应用程序供客户登录。本网站将使用与您的CRM不同的applicationId。然后,您的客户组织可以将用户帐户映射到他们的CRM记录,以便他们的客户可以查看它们。

因此,由于您的CRM(仍然)很小,最简单的方法是设计一个适合您的clients的良好架构,然后使用OwnerId标记所有CRM数据。而那OwnerId不能来自用户表或会员表或附近的任何地方。它必须来自列出数据合法所有者的表格。无论你是想称他们为组织,公司,客户还是其他任何人。它不能是userId,roleId,applicationId等,因为用户可能会离开拥有组织,角色在组织之间共享(至少那些用于确定访问某些MVC操作的角色),并且applicationIds是用于范围化成员和角色的在不同种类的客户应用程序之间

因此,您在这里丢失的是描述CRM记录所有者的表格,并将所有数据映射到其所有者。为此,没有简单的方法。你已经开发了CRM思想“这只是一个简单的单一组织CRM,所以我们让事情变得简单”。现在,您已经拥有了一个“简单的多组织CRM”,并要求简单的方法从最初的缺乏设计中恢复过来。接下来的步骤是询问您如何让自己的“不是那么简单的多组织CRM”轻松完成您所做的事情首先需要考虑的因素

简单的解决方案是设计您的应用程序可扩展性,并且只需“少许”额外支持未来的增长,从长远来看,每年两次重写你的应用程序很多,并且要记住,毕竟这是一个CRM,你不能继续告诉谁在他们的业务中使用它,因为我们正在修复一些东西在CRM中的东西。

我不会在这里光顾你,我正在回答任何可能正在读这本书的人。以寻求简单的解决方案,从不适当的规划中恢复过来。没有任何。寻求一个人犯了两次相同的错误。

相反,抓住一些笔和纸,并计划一个可行的设计,并使其工作。在软件设计和开发的早期阶段花一些额外的努力,你会发现这个工作可以节省你无数小时后的过程。那样,使用你的CRM的人会很乐意使用它。与用户谈论未来的变化将变得更加容易,而您不必思考“我不想这样做,因为它会再次破坏应用程序”。相反,你可以一起头脑风暴下一个很酷的一步。其中一些想法将在稍后留存,但实施的一些空间将在此阶段进行设计,以便实际实施的一年之后能够顺利进行,并且对于所有相关方而言都是愉快的。

这是我的简单解决方案。我有15年的发展背后,我仍然很享受它支持上述事实。主要是因为我把每一个(无论如何都是大多数)挑战作为更好地设计代码的机会,而不是试图躲避不可避免的过程。我们在芬兰有这样一句老话:“要么你会这样做,要么你会哭的。”它完美地符合这个法案。如果你喜欢哭这么多,现在就采取“简单的方式”,这取决于你。