我们如何配置一个类的空可移动组件(对象字段)?

Posted

技术标签:

【中文标题】我们如何配置一个类的空可移动组件(对象字段)?【英文标题】:how can we configure null removable components(object field) of a class? 【发布时间】:2018-01-28 09:22:11 【问题描述】:

假设我们有一个包含一些组件(对象字段)的类,其中一些可以为空(已删除) 是否适合创建没有(组件)字段的新类或使用接口来处理它。假设我们有几个可以为某些对象删除的组件 提前谢谢

public class Class1
   Component1 component1;
   Component2 component2;
   Component3 component3;//can be null (removed)
   Component4 component4;//can be null (removed)

public class Class2//removed component3,component4(new class)
   Component1 component1;
   Component2 component2;      

public class Class3//removed component3(new class)
   Component1 component1;
   Component2 component2;  
   Component4 component4;  

public class Class4//removed component4(new class)
   Component1 component1;
   Component2 component2;      
   Component3 component3;      

或使用接口

public interface IComponent1


public class Component1:IComponent1


public class NoComponent1:IComponent1


public interface IComponent2


public class Component2:IComponent2


public class NoComponent2:IComponent2


public interface IComponent3


public class Component3:IComponent3


public class NoComponent3:IComponent3


public interface IComponent4


public class Component4:IComponent4


public class NoComponent4:IComponent4


public class Class1
    IComponent1 componentBehaviour1;
    IComponent2 componentBehaviour2;
    IComponent3 componentBehaviour3;
    IComponent4 componentBehaviour4;

或检查类方法中的空条件(如果需要)。

【问题讨论】:

您的问题主要基于意见,因此不适合 Stack Overflow。也就是说,我的观点是,如果字段总是未用于一组特定的对象,那么是的......将类分成单独的类很合适,其中的字段适合于每个单独的类的实例。另一方面,如果有一种情况,您必须将一个类的一个实例替换为某个其他类的一个实例,因为您最初有一个 null 值并且不再这样做,反之亦然,那么不...不要那样做。 谢谢,但是如果我有几个具有相同字段的类,我如何访问不同类的对象字段(例如在循环中)。我应该用泛型为这些类实现 GetComponent() 吗? “我有几个类具有相同的字段” -- 你为什么要这样做?如果它们是相同的字段,则将它们设为相同的类。如果由于某种原因它们不能是同一个类,那么考虑定义每个类都可以实现的接口,然后您可以在需要这些字段时使用该接口。 我说了一些!它是可以或不可以的组件。基于组件的设计模式 假设我们有一个类有 Displayable 字段 (Displayable displayable ) 而一个类没有。我想实现基于组件的类而不是继承。 【参考方案1】:

根据我的经验,最好遵循面向对象的原则。在您的情况下,我认为您应该首先为所有必填字段创建一个类:

    public class Class1
   Component1 component1; 
   Component2 component2;
   

然后为每个可为空的字段使用接口,例如:

 public Interface interface1
       Component1 component3; 
       

然后是另一个界面,例如:

public Interface interface2
           Component1 component4; 
           

那么在你的课堂上你可以:

public class Class2: Class1, interface1

还有其他类,例如:

    public class Class2: Class1, interface2
    public class Class3: Class1, interface1, interface2

【讨论】:

组件字段进入界面?!您只能将接口方法和 getter setter 放入接口 接口中可以有Component的接口,比如IComponent【参考方案2】:

可能听起来很傻,但是为什么不只使用一个类来公开一组组件呢? 像这样的:

public interface IComponent

public class Foo
    private readonly IList<IComponent> _components;

    public void AddComponent(IComponent component)
        // do your magic here
    

    public IEnumerable<T> GetComponents<T>() where T : IComponent 
        // do your magic here
    

【讨论】:

以上是关于我们如何配置一个类的空可移动组件(对象字段)?的主要内容,如果未能解决你的问题,请参考以下文章

Django Newbie - 使用多字段表单,如何消除查询集中的空字段

如何判断一个new出来的空对象

如何查询 SOLR 的空字段?

Vuetify和require.js:如何显示动态组件?

如何在C中检查分配数组中的空字段

如何忽略 ExtJS 数据模型中的空字段?