这是我倾向于构建的Web应用程序中不断出现的需求之一。我们谈论的是需要坚持这样的结构:
public interface IAppSettings
{
string AppName { get; set; }
string SupportEmailAddress { get; set; }
bool IsEmailEnabled { get; set; }
// etc.
}
我经常从简单地使用web.config中的内置AppSettings开始,但随后它们通常会变成持久存储在数据库中(出于各种原因)。在这种情况下,我通常会做两件事之一:
...其中key和value列都是简单的nvarchar
字符串。这类似于在web.config中使用AppSettings,而是存储在数据库中。
CREATE TABLE [dbo].[Preferences]
(
[Key] [nvarchar(50)] NOT NULL,
[value] [nvarchar](200) NOT NULL
)
或者...
...其中每列代表具有特定数据类型的命名首选项。好处是我可以更准确地捕获数据类型(字符串与布尔值等),但缺点是添加属性需要进行架构更改,而不是像方法#1那样添加更多的键值行。
CREATE TABLE [dbo].[Preferences]
(
[AppName] [nvarchar(50)] NOT NULL,
[SupportEmailAddress] [nvarchar](250) NOT NULL,
[IsEmailEnabled] [bit] NOT NULL
)
我并不完全喜欢这两种方法中的任何一种,所以这次我正在考虑另一种方法:
CREATE TABLE [dbo].[Preferences]
(
[PreferenceValues] [nvarchar(max)] NOT NULL
)
想到的潜在好处是:
IAppSettings
对象并在应用程序内部使用。潜在的缺点:
IAppSettings
定义发生更改,数据可能会处于奇怪的状态,并且持久化的JSON数据已过期,现在无法再进行正确的反序列化。但是有一些方法可以在NoSQL世界中管理JSON文档版本,所以我只需要采用一些方法,我认为。对此有何想法?以前有人走过这条道路并有任何分享的智慧吗?