Я пытаюсь создать класс, который будет инициализировать себя сам, передавая ссылку на запись в базе данных (с намерением выполнить запрос к базе данных, и возвращенные значения для свойств объектов будут в нем), либо указав значения «вручную» - этот вызов базы данных не требуется.
Я просмотрел пару учебников, чтобы найти «Лучшую практику» для этой функции, и, к сожалению, у меня не получилось.
Я написал пару примеров консольных приложений, отражающих то, что я считаю двумя наиболее вероятными решениями, но я не представляю, что лучше всего реализовать правильно?
Пример приложения № 1 использует то, что большинство книг говорят мне, что это «предпочтительный» способ, но большинство примеров, приведенных вместе с этими утверждениями, не соответствуют контексту моей ситуации. Я беспокоюсь, что поток не так удобен для чтения, как приложение № 2.
using System;
namespace TestApp
{
public class Program
{
public static void Main(string[] args)
{
var one = new OverloadedClassTester();
var two = new OverloadedClassTester(42);
var three = new OverloadedClassTester(69, "Mike", 24);
Console.WriteLine("{0}{1}{2}", one, two, three);
Console.ReadKey();
}
}
public class OverloadedClassTester
{
public int ID { get; set; }
public string Name { get; set; }
public int age { get; set; }
public OverloadedClassTester() : this(0) { }
public OverloadedClassTester (int _ID) : this (_ID, "", 0)
{
this.age = 14; // Pretend that this was sourced from a database
this.Name = "Steve"; // Pretend that this was sourced from a database
}
public OverloadedClassTester(int _ID, string _Name, int _age)
{
this.ID = _ID;
this.Name = _Name;
this.age = _age;
}
public override string ToString()
{
return String.Format("ID: {0}\nName: {1}\nAge: {2}\n\n", this.ID, this.Name, this.age);
}
}
}
Этот образец (приложение № 2) «выглядит» более читабельным - в этом, я думаю, легче увидеть ход операции. Однако это выглядит эффективным с точки зрения сохраненных символов: с. Кроме того, не опасно ли, что он вызывает метод объекта до его полной инициализации, или это не проблема?
using System;
namespace TestApp
{
public class Program
{
public static void Main(string[] args)
{
var one = new OverloadedClassTester();
var two = new OverloadedClassTester(42);
var three = new OverloadedClassTester(69, "Mike", 24);
Console.WriteLine("{0}{1}{2}", one, two, three);
Console.ReadKey();
}
}
public class OverloadedClassTester
{
public int ID { get; set; }
public string Name { get; set; }
public int age { get; set; }
public OverloadedClassTester()
{
initialise(0, "", 21); // use defaults.
}
public OverloadedClassTester (int _ID)
{
var age = 14; // Pretend that this was sourced from a database (from _ID)
var Name = "Steve"; // Pretend that this was sourced from a database (from _ID)
initialise(_ID, Name, age);
}
public OverloadedClassTester(int _ID, string _Name, int _age)
{
initialise(_ID, _Name, _age);
}
public void initialise(int _ID, string _Name, int _age)
{
this.ID = _ID;
this.Name = _Name;
this.age = _age;
}
public override string ToString()
{
return String.Format("ID: {0}\nName: {1}\nAge: {2}\n\n", this.ID, this.Name, this.age);
}
}
}
Каков «правильный» способ решения этой проблемы и почему?
Спасибо,