首页 > 解决方案 > 用于字段单位转换的 C# 隐式获取

问题描述

我想为我的商店系统正确处理给定值(例如双倍)的单位。

在数据库中其全局配置,实际使用哪个单位。基本单位由全局配置设置。

现在我喜欢最隐含的方式从模型中获取我的值。

我想避免的是:

    public class BadWay
    {
        private double _width;
        public double Width
        {
           get { return LengthConverter.Convert(_width, GlobalConfig.LengthConversionFactor); }
           set { _width = value; }
        }
      }

我真正喜欢的:

    [LengthUnit]
    public double Width { get; set; }

    [WeightUnit]
    public double Weight { get; set; }

在 Attribute 中,一切都被处理以进行转换。我已经看到一个讨论,这是一种不好的方式。

我真的很想知道您对此的想法/库/解决方案..

标签: c#attributesimplicit

解决方案


我认为这一切都归结为设计原则。是的,您可以做您想做的事,但您最终仍会在某些转换中添加库或硬编码。

设计的一个常见问题是我们喜欢过度简化事物。您的属性可以被认为是双精度的,但这并不是它们的真正含义,它们是单位。

然后你可以为上面提到的每种类型的单元设置一个类

public LengthUnit Width { get; set; }

public WeightUnit Weight { get; set; }

每个 Unit 类都可以从一个接口继承,该接口提供您需要的任何内容,例如 Unit 因子或转换为另一个单位。


推荐阅读