Информация об изменениях

Сообщение Re[2]: "Гибкий" конструктор для инициализации объекта класса от 15.09.2023 11:38

Изменено 15.09.2023 11:40 Sm0ke

Re[2]: "Гибкий" конструктор для инициализации объекта класса (аналог Dispose)
Здравствуйте, zelenprog

Можно сделать вспомогательные функции приложения таким образом, чтобы ...
// global function
I_DBAdapter MakeDBAdapter(string pFileName) // 1
{
  I_DBAdapter lDBAdapter = null;
  T_DatabaseInfo lDatabaseInfo = new T_DatabaseInfo(pFileName);
  
  if lDatabaseInfo.DBType = Database.DBType1 then
    lDBAdapter = new T_DBAdapter1(pFileName);
  elseif lDatabaseInfo.DBType = Database.DBType2
    lDBAdapter = new T_DBAdapter2(pFileName);
  else
    // исключение "неизвестный тип БД
  endif
  
  return lDBAdapter;
}

// global function
T_DBGoodsReader MakeDBGoodsReader(string pFileName) // 2
{
  T_DBGoodsReader lDBGoodsReader = new T_DBGoodsReader;
  I_DBAdapter lDBAdapter = MakeDBAdapter(pFileName); // 1
  
  lDBGoodsReader.SetAdapter(lAdapter);
  lDBGoodsReader.Init();
  
  return lDBGoodsReader;
}

... Чтобы их было легче использовать
Class MainForm
{
  string mFileName;
  
  void OnButton_ReadDatabase()
  {
    T_DBGoodsReader lDBGoodsReader = MakeDBGoodsReader(mFileName); // 2
    
    lDBGoodsReader.Read();
    
    // показать на форме список товаров
  }
}


--
Z>
Z>Class MainForm
Z>{
Z>    string mFileName;
    
Z>    void OnButton_ReadDatabase()
Z>    {
Z>        T_DatabaseInfo lDatabaseInfo = new T_DatabaseInfo(mFileName);
Z>        T_DBGoodsReader lDBGoodsReader = new T_DBGoodsReader;
Z>        I_DBAdapter lDBAdapter = null;
        
Z>        if lDatabaseInfo.DBType = Database.DBType1 then
Z>            lDBAdapter = new T_DBAdapter1(mFileName);
Z>        elseif lDatabaseInfo.DBType = Database.DBType2
Z>            lDBAdapter = new T_DBAdapter2(mFileName);
Z>        else
Z>            // исключение "неизвестный тип БД
Z>        endif
        
Z>        lDBGoodsReader.SetAdapter(lAdapter);
Z>        lDBGoodsReader.Init();
Z>        lDBGoodsReader.Read();
        
Z>        // показать на форме список товаров
Z>    }
Z>}
Z>
Re[2]: "Гибкий" конструктор для инициализации объекта класса
Здравствуйте, zelenprog

Можно сделать вспомогательные функции приложения таким образом, чтобы ...
// global function
I_DBAdapter MakeDBAdapter(string pFileName) // 1
{
  I_DBAdapter lDBAdapter = null;
  T_DatabaseInfo lDatabaseInfo = new T_DatabaseInfo(pFileName);
  
  if lDatabaseInfo.DBType = Database.DBType1 then
    lDBAdapter = new T_DBAdapter1(pFileName);
  elseif lDatabaseInfo.DBType = Database.DBType2
    lDBAdapter = new T_DBAdapter2(pFileName);
  else
    // исключение "неизвестный тип БД
  endif
  
  return lDBAdapter;
}

// global function
T_DBGoodsReader MakeDBGoodsReader(string pFileName) // 2
{
  T_DBGoodsReader lDBGoodsReader = new T_DBGoodsReader;
  I_DBAdapter lDBAdapter = MakeDBAdapter(pFileName); // 1
  
  lDBGoodsReader.SetAdapter(lAdapter);
  lDBGoodsReader.Init();
  
  return lDBGoodsReader;
}

... Чтобы их было легче использовать
Class MainForm
{
  string mFileName;
  
  void OnButton_ReadDatabase()
  {
    T_DBGoodsReader lDBGoodsReader = MakeDBGoodsReader(mFileName); // 2
    
    lDBGoodsReader.Read();
    
    // показать на форме список товаров
  }
}


--
Я просто переорганизовал ваш код

Z>
Z>Class MainForm
Z>{
Z>    string mFileName;
    
Z>    void OnButton_ReadDatabase()
Z>    {
Z>        T_DatabaseInfo lDatabaseInfo = new T_DatabaseInfo(mFileName);
Z>        T_DBGoodsReader lDBGoodsReader = new T_DBGoodsReader;
Z>        I_DBAdapter lDBAdapter = null;
        
Z>        if lDatabaseInfo.DBType = Database.DBType1 then
Z>            lDBAdapter = new T_DBAdapter1(mFileName);
Z>        elseif lDatabaseInfo.DBType = Database.DBType2
Z>            lDBAdapter = new T_DBAdapter2(mFileName);
Z>        else
Z>            // исключение "неизвестный тип БД
Z>        endif
        
Z>        lDBGoodsReader.SetAdapter(lAdapter);
Z>        lDBGoodsReader.Init();
Z>        lDBGoodsReader.Read();
        
Z>        // показать на форме список товаров
Z>    }
Z>}
Z>