1

(代理设置除外!)

我花了一些时间在这里写一个关于我遇到的问题的更好模式的问题 - 一个对几乎每个属性 getter 执行一些条件初始化的类,因为基类中的初始化依赖于继承类的数据,而这些数据不是施工时可用。

在编写问题时,我得出结论,在继承器构造上进行初始化是更好的做法。这将要求每个继承类调用父类初始化方法,但我认为它更好,因为:

  1. 我不必记住在每个新属性 getter/setter 的基类中进行初始化。
  2. 我在调试时不会意外触发初始化(请参阅我的问题here

如果您曾经有过更改属性 getter 中状态的代码,您认为这绝对合理吗?你能举一个这样的例子吗?(或者甚至描述模式?)

我只能想到代理访问,在属性访问之前你不想执行初始化......


有人建议我使用工厂/静态方法进行初始化——这实际上是一个好主意(当构造简单时,当继承类之间不统一时会有点困难),但是在我有机会提交回复之前,答案就被删除了. 太糟糕了。

4

1 回答 1

4

延迟缓存。在访问属性之前,您不会从数据库中加载数据。(不确定这是否是您所说的代理访问)。

但是,我不会真的认为这是在逻辑上改变对象的状态,因为类的行为在访问前后保持不变。数据始终隐含在那里。逻辑状态保持不变。

我永远不会通过 getter 更改类的逻辑状态,因为它违反直觉且逻辑上不正确。你确实冒着各种意想不到的后果的风险..

您可以执行以下操作:

    public class baseone
    {
        private baseone ()
        {
        }

        public baseone ( string huh )
        {
                initialise(huh);
        }

            protected abstract initialise(string stuff); 
    }


    public class niceone : baseone
    {
        public niceone (string param)
         : base(param)
        {

        }

            protected override initialise(string stuff)
            {
               // do stuff..
            }
    }

将基类的默认构造函数设为私有可确保必须传递所需的参数来初始化类。

于 2009-11-19T09:02:34.083 回答