Mam trochę problemów z zaprojektowaniem klasy. Tworzenie klasy klienta wygląda prosta:Jak skonstruować obiekt z wieloma właściwościami?
TCustomer = Class
private
FIdNumber: String;
FName: String;
procedure SetName(const Value: String);
procedure SetNumber(const Value: String);
public
Property Name : String read FName;
Property IdNumber : String read FIdNumber;
Constructor Create(Number, Name : String);
end;
constructor TCustomer.Create(ANumber, AName: String);
begin
SetName(AName);
SetNumber(ANumber);
end;
MyCustomer := TCustomer.Create('1', 'John Doe');
Ale dobrze mój klient ma więcej właściwości: gdzie mieszka, data urodzenia itp itd
TCustomer = Class
private
{..snip snip..}
public
Property Name : String read FName;
Property IdNumber : String read FIdNumber;
Property Street : String read FStreet;
Property HouseNumber : Integer : read FHouseNumber;
..
..
..
Constructor Create(Number, Name, Street : String; Housenumber : Integer .. .. ..);
end;
Jak widać ja skończyć z konstruktora z całą masą argumentów. Jaki jest lepszy sposób na skonstruowanie obiektu o wielu właściwościach?
Moja początkowa thoght jest skonstruowanie klasę tylko w * * zasadniczych właściwości, które prowadzą do tworzenia instancji klasy. na przykład w twoim przypadku może to być unikalny "UserID". – kobik
Możesz zrobić analogiczny ze swojego przypadku do utworzenia nowego rekordu DB ('insert'). Zastanów się, jakie właściwości są * wymagane * (użyj ich w argumentach konstruktora) i które właściwości mają wartości domyślne (zainicjuj je wewnątrz konstruktora klasy). – kobik
można zdefiniować ** konstruktora **, który pobiera tablicę z pary i przy użyciu RTTI, analizuje klasę TCustomer i ustawia wartości pól z parametrów, tj. TMyCustomer.Create ([AProp ("FirstName", "Joe"), AProp ("LastName", "Doe"), ...]); –
ComputerSaysNo