带有多态性的通用接口来处理对象

本文关键字:接口 处理 对象 多态性 | 更新日期: 2023-09-27 17:54:15

上一篇文章已删除; :


所以我有一个独特的问题,这可能是相当普遍的。属性很可能是最常用的代码;因为它要求我们的数据保持常量存储。所以我想我该如何实现它;然后我想到泛型可以让生活变得多么简单。不幸的是,我们不能只在泛型中使用属性而不做一些繁重的跑腿工作。这就是我的解决方案/问题;因为我不确定这是最好的方法——这就是为什么我要征求同事的意见。

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

文摘:

表示层:接口将有一系列字段;或者甚至数据通过网络服务传输到我们的数据库。

// 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操作的泛型

我在正确的道路上吗?这是禁忌吗?我不应该这样做吗?我的应用程序需要保存每个实例;但我需要在不破坏过程中的每一个实例的情况下快速适应的灵活性。这就是我认为我可以解决这个问题的方法。任何想法吗?建议吗?我是不是漏掉了一个概念?还是我想多了?我是否错过了机会,完全错误地执行了我的想法?

带有多态性的通用接口来处理对象

在对这个场景进行了一些思考之后,我想怎样才能在保证代码为修改和业务优化的同时提供灵活性。我不确定这是正确的解决方案,但它似乎有效。它不仅有效,而且效果很好。它看起来相当健壮。

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

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
}

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

所以本质上它的作用类似于Repository。

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

老实说,它似乎工作得很好,解耦也很好。我觉得做一些类似于普通的存储库和工作单元的事情需要做很多工作,这回答了这个问题,但不管它是否适合你的项目,我都要看看存储库、工作单元、关注点隔离、控制反转和依赖注入。他们可能会更利落地使用同样的方法。


更新:

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