在类外部实现类型或在类内部创建实例的OOP设计

本文关键字:实例 OOP 设计 创建 外部 实现 类型 内部 | 更新日期: 2023-09-27 18:17:19

当从SQL Server填充数据时,到达BObj_Sf 's Sn的最佳方法是什么?

这个

public class BObj_Sub
{
    BObj_Sf _Sn = new BObj_Sf();
    public BObj_Sf Sn
    {
        get { return _Sn; }
        set { _Sn = value; }
    }
}

或者这是ooP的一个更好的方面?

BObj_Sub sub = new BObj_Sub
 {
    Sf = new BObj_Sf { SAd = SAd },
 };

在类外部实现类型或在类内部创建实例的OOP设计

我相信你的问题更多的是与良好的编程实践和there could be multiple solution or design technique for this question有关。

我将创建这样的类-

// create interface for providing {x} features
public interface IBObj_Sf
{
   ...
   ...
}
// create class which provides {x} features of IBObj_Sf interface
public class BObj_Sf : IBObj_Sf
{
   ...
   ...
}
// now implement BObj_Sub class like -
public class BObj_Sub
{
        // mark as readonly depending it is modifiable or 
        // not withing BObj_Sub's lifecycle
        private readonly IBObj_Sf _Sn; 
        public BObj_Sub(IBObj_Sf sn)
        {
            _Sn = sn;
        }
        public BObj_Sf Sn
        {
            get { return _Sn; }
            private set { _Sn = value; }
        }
}

用法:

BObj_Sf sf = new BObj_Sf();
BObj_Sub sub = new BObj_Sub(sf);

优点:明天如果您想将BObj_Sf更改为一些新的类BObj_Xf,那么只有以下几行将随着您的新类一起更改。-

BObj_Xf xf = new BObj_Xf();
BObj_Sub sub = new BObj_Sub(xf);

BObj_Sub中的代码保持不变。