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

如何设计我的课堂

  •  0
  • sventevit  · 技术社区  · 16 年前

    我有一个类,它返回三个属性。第一个属性依赖于某个参数,第二个属性依赖第一个属性,第三个属性依赖第二个特性。

    实现这类类的最佳方式是什么?是否有合适的设计模式?下面我粘贴了两个版本的代码,这两个版本都有效,我想知道哪个版本更好(或者我把事情复杂化了太多)?

    第一个:

    class Initializer
    {
        private string lastCode;
        private int lastPackage;
        private int lastBox;
    
        public Initializer(int machineNumber)
        {
            lastCode = GetLastCodeFromDatabase(machineNumber);
            lastPackage = GetLastPackageByLastCode(lastCode);
            lastBox = GetLastBoxByLastPackage(lastPackage);
        }
    
        public string LastCode
        {
            get { return lastCode; }
        }
    
        public int LastPackage
        {
            get { return lastPackage; }
        }
    
        public int LastBox
        {
            get { return lastBox; }
        }
    
        private string GetLastCodeFromDatabase(int machineNumber)
        {
            using (InitializerTableAdapter adapterGetLastCode = new InitializerTableAdapter())
            {
                return Convert.ToString(adapterGetLastCode.GetLastCodeByMachineNumber(machineNumber));
            }
        }
    
        private int GetLastPackageByLastCode(string lastCode)
        {
            using (InitializerTableAdapter adapterGetLastPackage = new InitializerTableAdapter())
            {
                return Convert.ToInt32(adapterGetLastPackage.GetLastPackageByLastCode(lastCode));
            }
        }
    
        private int GetLastBoxByLastPackage(int lastPackage)
        {
            using (InitializerTableAdapter adapterGetLastPackage = new InitializerTableAdapter())
            {
                return Convert.ToInt32(adapterGetLastPackage.GetLastBoxByPackageNumber(lastPackage));
            }
        }
    }
    

    class Initializer
    {
        public static string LastCode(int machineNumber)
        {
            return GetLastCodeFromDatabase(machineNumber);
        }
    
        public static int LastPackage(string lastCode)
        {
            return GetLastPackageByLastCode(lastCode);
        }
    
        public static int LastBox(int lastPackage)
        {
            return GetLastBoxByLastPackage(lastPackage);
        }
    
        private static string GetLastCodeFromDatabase(int machineNumber)
        {
            using (InitializerTableAdapter adapterGetLastCode = new InitializerTableAdapter())
            {
                return Convert.ToString(adapterGetLastCode.GetLastCodeByMachineNumber(machineNumber));
            }
        }
    
        private static int GetLastPackageByLastCode(string lastCode)
        {
            using (InitializerTableAdapter adapterGetLastPackage = new InitializerTableAdapter())
            {
                return Convert.ToInt32(adapterGetLastPackage.GetLastPackageByLastCode(lastCode));
            }
        }
    
        private static int GetLastBoxByLastPackage(int lastPackage)
        {
            using (InitializerTableAdapter adapterGetLastPackage = new InitializerTableAdapter())
            {
                return Convert.ToInt32(adapterGetLastPackage.GetLastBoxByPackageNumber(lastPackage));
            }
        }
    }
    
    3 回复  |  直到 16 年前
        1
  •  2
  •   Kevin Peterson    16 年前

    如果第二个是更好的匹配,您应该研究依赖注入,以便您可以注入不同的数据源进行测试(或者当您从SQL后端更改为本地数据库时,等等)。

        2
  •  1
  •   Kekoa    16 年前

    这取决于你是想预先初始化所有变量,还是只在需要时执行它。我认为最好的方法完全取决于你希望如何使用这个类。如果你会经常使用这些属性,并且值不会改变,也许可以进行初始化(你的第一个选项),或者 Lazy Loading .

        3
  •  1
  •   Oliver Hanappi    16 年前

    一个版本的代码使用缓存值,而另一个版本直接从底层数据源检索值。第一种具有更好的性能,因为到数据源的往返只执行一次,后者总是拥有最实际的数据。我认为在你的情况下,这取决于班级的使用情况。