代码之家  ›  专栏  ›  技术社区  ›  CorellianAle

如何在复杂对象中正确实现属性

  •  0
  • CorellianAle  · 技术社区  · 6 年前

    我有以下型号:

    class IdNamePair
    {
        protected int id;
        protected String name;
    
        public IdNamePair()
        {
            id = 0;
            name = "";
        }
    }
    
    class Voyage extends IdNamePair
    {
        //Several string and int variables
    }
    
    class Employee extends IdNamePair
    {
        //Several string and int variables
    }
    
    class Vessel extends IdNamePair
    {
        //Some string and int variables
    }
    
    class Details
    {
        //Several string and int variables
    }
    
    class Summary
    {
        protected Vessel vessel;
        protected Employee chief;
        protected Employee operator;
        protected List<Details> details
    }
    
    class Update
    {
        protected LocalDateTime created;
        protected LocalDateTime modified;
        List<Summary> summaries;
        //Some string and int variable.
    }
    

    我无法理解如何创建一个包含多个列表、映射和其他类实例的复杂对象。我可以用相应的属性类型替换现有的字段类型( String StringProperty , double DoubleProperty 但我如何处理复杂类型( List<Summary> , HashMap<String, Vessel> , List<Details> )?

    另一个问题是,如果我想支持属性,我应该转换现有对象还是需要创建新对象。我可以代替

    class IdNamePair
    {
        protected int id;
        protected String name;
    }
    

    具有

    class IdNamePair
    {
        protected IntegerProperty id;
        protected StringProperty name;
    }
    

    或者我可以提供一种新类型

    class IdNamePairEx
    {
        protected IntegerProperty id;
        protected StringProperty name;
    
        public IdNamePairEx(IdNamePair idNamePair);
    
        ///to simple object
        public IdNamePair toIdNamePair();
        ///from simple object
        public void fromIdNamePair(IdNamePair idNamePair);
    }
    

    并在处理GUI代码时使用它。这种方法将提供与现有代码(JSON序列化,JDBC)的向后兼容性,但实际上会使我的模型类数量增加一倍。首选的方式是什么?

    更新:

    我有一个与PostgreSQL通信并执行各种CRUD操作的程序。数据库中的每个表都有相应的类。 我需要开发一个利用现有类的新模块,我想通过绑定和属性实现GUI更新。 我需要用相应的属性类型替换每种类型的变量吗( 一串 -> StringProperty )还是创建通过属性操作并提供转换方法的类似类更好( class Vessel -> class VesselWithPropertiesInteadOfRawTypes )?

    0 回复  |  直到 6 年前