首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置模块

配置模块
EN

Code Review用户
提问于 2018-06-02 06:55:19
回答 1查看 79关注 0票数 3

我开始用C#编写一个新的框架,它可以用于任何服务器开发。它包含数据库、TCP和配置等基本内容。我昨晚确实写了配置,我很想得到一些建设性的批评和建议。

我知道我还没有记录这段代码,一旦我100%满意它,我就计划去做它。

首先,我们有BaseConfiguration类。这个类基本上是所有配置模块的基础(超类)。

代码语言:javascript
复制
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类,它只是框架中的配置模块之一。

代码语言:javascript
复制
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()并将其传递给需要使用配置的类。

EN

回答 1

Code Review用户

发布于 2018-06-02 10:46:33

您真的希望DatabaseConfiguration的属性是可设置的吗?

public string Server { get; set; }

如果时间不是问题的话,我会对每一项财产的调用“懒惰”:

代码语言:javascript
复制
public string Server => Get<string>("server");
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/195676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档