2

以前的帖子被删除;更新


所以我有一个独特的问题,虽然这可能相当普遍。属性很可能是最常用的代码;因为它要求我们的数据保持恒定的值存储。所以我想我怎么能实现这个;然后我想到了泛型可以让生活变得多么容易。不幸的是,我们不能在没有繁重工作的情况下只在泛型中使用属性。所以这是我的解决方案/问题;因为我不确定这是不是最好的方法——这就是我寻求同行审查的原因。

请记住,应用程序将是巨大的;这是一个非常简单的例子。

抽象的:

表示层:界面会有一系列字段;甚至数据通过网络服务通过网络传输到我们的数据库。

// Interface:
public interface IHolder<T>
{
     void objDetail(List<T> obj);
}

所以我最初的想法是一个接口,它可以让我通用地处理我的每个对象。

// User Interface:
public class UI : IHolder
{
    void objDetail(List<object> obj)
    {
        // Create an Instance
        List<object> l = new List<object>();
        // Add UI Fields:
        l.Add(Guid.NewGuid());
        l.Add(txtFirst.Text);
        l.Add(txtLast.Text);
        // l to our obj        
        obj = l;
        return;
     }
}

现在我有了一个界面;我们的 UI 已经使用它来输入信息。现在;这就是我好奇心的根源所在。

// Create an Object Class
public class Customer : IHolder
{
     // Member Variable:
     private Guid _Id;
     private String _First;
     private String _Last;

     public Guid Id
     { 
           get { return _Id; }
           set { _Id = value; }
     }
     public String First
     {
           get { return _First; }
           set { _First = value; }
     }
     public String Last
     {
           get { return _Last; }
           set { _Last = value; }
     }

     public virtual objDetail(List<Customer> obj)
     {
         // Enumerate through List; and assign to Properties.
     }
}

现在这是我认为很酷的地方;如果我可以使用多态性来使用相同的接口;但覆盖它以不同的方式执行该方法。所以接口使用了一个泛型;能够变形为我们给定的项目类别。

现在我们的对象类;可以移动到我们的实体接口,它将处理基本的 Crud 操作。

我知道这个例子对我的意图不是最好的;因为你真的不需要使用多态性。但是,这是总体想法/目标......

  • 存储表示层 UI 字段值的接口
  • 将属性实现到所需的类
  • 在我的班级周围创建一个包装器;可以是多态的。
  • 变形为 Crud 操作的泛型

我在正确的道路上吗?这是禁忌吗?我不应该这样做吗?我的应用程序需要保存每个实例;但我需要灵活性来快速适应,而不会破坏过程中的每一个实例。这就是我认为我可以解决问题的方式。有什么想法吗?建议?我在这里错过了一个概念吗?还是我想多了?我是否错过了这条船并完全错误地实施了我的想法?那是我迷路的地方...

4

1 回答 1

0

在考虑了这个场景之后,我想什么可以提供这种灵活性,同时仍然确保代码针对修改和业务进行了优化。我不确定这是正确的解决方案,但它似乎有效。它不仅有效,而且效果很好。它似乎相当健壮。

这种方法什么时候有用?好吧,当您打算将用户界面与逻辑分离时。我将逐步构建每个方面,以便您可以看到整个结构。

public interface IObjContainer<T>
{
     void container(List<T> object);
}

这种特殊的结构将很重要。因为它将所有所需的内容存储到其中。

因此,首先您将创建一个包含一系列字段的表单。

  • 个人信息
  • 地址信息
  • 支付信息
  • 订单信息

如您所见,所有这些都可以是单独的数据库表,但属于您正在操作的类似实体模型。这很常见。

因此,关注的隔离将开始略微显示,字段将被操作并通过接口传递。

public interface IPersonalInformation
{
      public string FirstName { get; set; }
      public string LastName  { get; set; }
}

所以本质上,接口将其变量传递给接口。因此,您将建立一个接口来处理您希望调用的整个表单或单个接口,以便它们保持可重用。

所以现在你有一系列的接口,或者一个单一的。但它包含所有这些要使用的变量。所以你现在要创建一个类:

public class CustomerProperties: IPersonalInformation, IOrderInformation
{
    // Implement each Interface Property
}

现在您已经创建了一个容器来保存您的所有值。这个容器的妙处在于您可以在应用程序中为另一个类重用相同的值或选择不同的值。但它会在逻辑上分离用户界面。

所以本质上这类似于存储库。

现在您可以获取这些值并执行所需的逻辑。现在变得很棒的是,在您执行完逻辑之后,您将对象传递到我们的通用列表中。然后,您只需在另一个类中为您的目标实现该方法并遍历您的列表。

老实说,它似乎运行良好并且很好地解耦。我觉得做一些类似于普通存储库和工作单元的工作需要做很多工作,这回答了这个问题,但天气与否对你的项目来说是理想的,我会研究存储库、工作单元、关注点隔离,控制反转和依赖注入。他们可能会更清洁地使用相同的方法。


更新:

写完之后我想了想,我注意到你实际上可以绕过一系列接口将这些属性值实现到通用列表结构中;但这会引入一致性问题,因为您必须知道每次按顺序传递的数据。这是可能的,但可能并不理想。

于 2013-02-27T19:47:55.783 回答