【问题标题】:Design pattern for translating data翻译数据的设计模式
【发布时间】:2016-05-11 12:37:03
【问题描述】:

我正在处理一个 C# 项目,我需要管理数据的本地缓存并将其呈现在 GUI 上。

例如我有:

    public class DataFromOtherLibrary

现在我想创建一个类来帮助翻译我需要的信息

    public class MyDataModel
    {
            private DataFromOtherLibrary cache;
            public MyDataModel ( DataFromOtherLibrary Source)
            {
                    cache = Source;
            }
            public long Field1 { get { return cache.SomeField; } }
            public long Field2 { get { return cache.OtherFiled; } }
     }

现在我遇到的问题是我需要为每个DataFromOtherLibrary 创建一个MyDataModel,如果有一个翻译类就好了。我不知道该怎么做并且仍然实现属性(我需要数据绑定到)。

谢谢 马特

【问题讨论】:

  • 听起来您需要一个返回 IMyDataModel 的工厂。但由于缺乏信息,这在某种程度上是在黑暗中拍摄的。
  • 同意,你的目标不明确
  • 我也认为你应该使用一个提供者(工厂)类,它会返回一个包含 MyDataModle 对象的列表。
  • 我想你在abstract factory pattern之后?
  • 对我来说,OP 似乎需要一个代理 - 类 with properties (因为他需要在像 WPF 这样的 UI 库中绑定它们)作为另一个代理类(DataFromOtherLibrary)。

标签: c# oop design-patterns


【解决方案1】:

您应该使用包含所有数据模型的 Provider,例如:

public class MyDataModelProvider
{
    public List<MyDataModel> DataModelList { get; set; }

    MyDataModelProvider()
    {
        loadDataModelList();
    }

    private void LoadDataModel()
    {
        foreach (Cachobject c in Cache)
        {
            this.DataModelList.Add(new MyDataModel(c.valueA,c.valueB));
        }
    }
}

对于这个 Provider,你还需要一个 Factory Like:

[Singleton(true)]
public class DataModelListProviderFactory
{
    private static DataModelListProvider dataListProvider;
    public DataModelListProvider getInstance()
    {
        if (dataListProvider == null)
        {
            dataListProvider = new DataModelListProvider();
           return dataListProvider;
        }
        else
            return dataListProvider;
    }
}

因为现在您拥有一个包含所有数据模型的 Spot,并且您只需接收一次。如果您有案例或在视图中显示所有数据,您还可以轻松地在列表中搜索特定模型。

您可以阅读here 了解有关工厂模式的更多信息。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2010-12-29
    • 2010-10-11
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多