Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果您有多个应用程序,那么将用户存储在一个表中并使用一列区分应用程序是否是一种良好的设计实践_C#_Design Patterns - Fatal编程技术网

C# 如果您有多个应用程序,那么将用户存储在一个表中并使用一列区分应用程序是否是一种良好的设计实践

C# 如果您有多个应用程序,那么将用户存储在一个表中并使用一列区分应用程序是否是一种良好的设计实践,c#,design-patterns,C#,Design Patterns,我有一个名为Authentication的C#项目,允许用户登录并检查其登录凭据,如果通过,则返回令牌 我想为我正在设计的其他应用程序重用C#身份验证项目。将来自不同应用程序的所有用户存储在一个表中是一种良好的做法,还是有更好的方法为多个应用程序的一个身份验证项目编码?这取决于具体情况 代码重用和基础结构重用之间存在差异。前者是可以的,因为应用程序之间有一个干净的分隔。不建议共享数据库,因为如果您不仔细设计,它可能会引入安全漏洞 我还将区分用户和帐户的概念。帐户用于登录到应用程序并加载正确的权限

我有一个名为Authentication的C#项目,允许用户登录并检查其登录凭据,如果通过,则返回令牌

我想为我正在设计的其他应用程序重用C#身份验证项目。将来自不同应用程序的所有用户存储在一个表中是一种良好的做法,还是有更好的方法为多个应用程序的一个身份验证项目编码?

这取决于具体情况

代码重用和基础结构重用之间存在差异。前者是可以的,因为应用程序之间有一个干净的分隔。不建议共享数据库,因为如果您不仔细设计,它可能会引入安全漏洞

我还将区分用户和帐户的概念。帐户用于登录到应用程序并加载正确的权限。i、 e.帐户控制用户在应用程序中可以做什么,而“用户”对象描述用户本身

如果这样将其分开,则创建可重用库会容易得多,因为与身份验证/授权相关的所有内容都在其自身部分。这是因为身份验证设计很少改变。应用程序中的不同之处通常是描述用户的信息以及每个用户想要的自定义类型

简短答复:

  • 将与身份验证和授权相关的所有内容分离到“Account”对象中
  • 将描述用户的所有内容收集到“用户”对象中
  • 重用account部分,但在每个应用程序中构建“用户”部分

永远不要在服务之间共享数据库。这将造成一场维护噩梦。 每个数据库都应该围绕(和之后)由相关微服务处理的有界上下文进行设计

在您的情况下,这意味着一个DB存储身份验证数据,然后每个服务另一个DB存储相关数据


在单独的数据库中有一个
Users
表来保存一些重复的数据是非常好的。只要您足够勤奋,并且有一个保持数据同步的好策略。

在重用代码时,您不必重用数据库。每个应用程序都可以有自己的数据库和Users表。除非你想要某种集中的解决方案?