我开始用C#编写一个新的框架,它可以用于任何服务器开发。它包含数据库、TCP和配置等基本内容。我昨晚确实写了配置,我很想得到一些建设性的批评和建议。
我知道我还没有记录这段代码,一旦我100%满意它,我就计划去做它。
首先,我们有BaseConfiguration类。这个类基本上是所有配置模块的基础(超类)。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
namespace AuroraFramework.Configuration
{
public abstract class BaseConfiguration
{
private readonly string filePath;
private JObject jsonSettings;
protected BaseConfiguration(string filePath)
{
this.filePath = filePath;
ReadFile();
}
private void ReadFile()
{
StreamReader reader = new StreamReader(filePath);
jsonSettings = JsonConvert.DeserializeObject<JObject>(reader.ReadToEnd());
}
protected T Get<T>(string key)
{
return jsonSettings[key].Value<T>();
}
}
}它所做的很简单。它读取在构造函数中传递的文件,并将其“转换”为JObject。用于从JObject获取值。然后使用Get函数从JObject中获取值,并以正确的数据类型返回它。我选择这样做的原因是要比使用JsonConvert.DeserializeObject<TYPE>(string)时拥有更多的控制。
整个类习惯于实现新的配置模块,而无需单独读取整个文件,也无需编写大量代码。
接下来,我们有了DatabaseConfiguration类,它只是框架中的配置模块之一。
namespace AuroraFramework.Configuration.Types
{
public class DatabaseConfiguration : BaseConfiguration
{
public string Server { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Database { get; set; }
public DatabaseConfiguration()
: base("db.settings.json")
{
Server = Get<string>("server");
Username = Get<string>("username");
Password = Get<string>("password");
Database = Get<string>("database");
}
}
}这只是使用BaseConfiguration类作为超类。这将使超类读取文件并将其转换为JObject。配置模块本身唯一要做的事情就是对每个属性调用Get函数。
然后,在框架中使用DatabaseConfiguration dbConfig = new DatabaseConfiguration()并将其传递给需要使用配置的类。
发布于 2018-06-02 10:46:33
您真的希望DatabaseConfiguration的属性是可设置的吗?
public string Server { get; set; }
如果时间不是问题的话,我会对每一项财产的调用“懒惰”:
public string Server => Get<string>("server");https://codereview.stackexchange.com/questions/195676
复制相似问题