Class, Members & Method
Class name
Không cần có bất kỳ từ viết hoa tối nghĩa nào mà chỉ cần viết thẳng các từ luôn. (Trừ Entity Classes và Memory Classes)
Ví dụ: không nên viết C “class” CApplication mà phải viết là Application.
Static Method
Mỗi class chắc phải có 5 6 STATIC methods này:
List (lấy danh sách),
Get (lấy chi tiết theo ID),
Add (hoặc Insert) (thêm mới 1 đối tượng),
Update (cập nhất 1 đối tượng đang tồn tại), và
Delete. Delete[ID]()
UnitTest()
VD: UserList(), UserGet() hoặc UserAdd(), UserUpdate(), UserDelete()
(hoặc viết ngược lại: List(), Get() hoặc Add(), Updater(), Delete()
User aUser = CUser.Get();
User().List();
Access Member Method
Thường thì members nó sẽ tương ứng với columns của database,và nếu database có column là ID (VD Timezone ID) thì class thể hiện bằng 1 đối tượng tương ứng (không phải là Timezone_ID mà là doi tuong Timezone); và vì vậy, mình không nên cho trực tiếp access member mà chỉ cho access thông qua accessors thoi.
VD: User class có biến Username
-> có method GetUsername() chứ không truy cập aUser.Username()
Nhưng đối tượng User muốn truy cập Package_ID hay Timezone_ID thì không duoc truy cap member trực tiếp, mà chỉ thông qua đối tượng đó (đối tượng là khóa ngoại).
Int userId = aUser.ID; ok, nhưng Int packageId = aUser.Package_ID; Int timezoneId = aUser.Timezone_ID; Int packageId = aUser.GetPackage().ID;
Int timezoneId = aUser.GetTimeZone().ID;
Tóm lại, với rule này, class về đối tượng thì y chang như class về Entity ở database, nhưng nếu đó là 1 khóa ngoại (như Package_ID, Timezone_ID chỉ là khóa ngoại của table User mà) thì ở class với đối tượng phải thay thế bằng 1 đối tượng của khoái ngoại (như Package_Id thay bằng class đối tượng CPackage, Timezone_ID -> class CTimezone).
Đệ quy lấy đối tượng là khóa ngoại
Theo nguyên tắc #4 trên, khi lấy thông tin đối tượng User:
CUser aUser = User.Get(userId);
Thì trong method STATIC Get() này, sẽ viết là:
CUser Get() {
// goi dataProvider query data doi tuong User theo Id
If (aUser == null)
aUser = new CUser();
aUser = dataProvider.Get(userId);
// thì trong class User có bao nhiêu đối tượng là khóa ngoại (theo thiết kế database) thì sẽ query bao nhiêu lần.
// vd thiết kế database thì User sẽ có Brand_Id, Package_ID, TimezoneID
// và UserProfile có Address_1, Address_2
this.Brand = Brand.Get(this.ID);
this.Package = Package.Get(this.Package_ID);
this.Timezone = Timezone.Get(this.Timezone_ID);
this.Address_1 = Address.Get(this.Address_ID_1);
this.Address_2 = Address.Get(this.Address_ID_2);
// như vậy các bước trên là đệ quy, ví dụ trong các hàm Get của CBrand, CPackage, CTimezone, CAddress nếu có ID nào là khóa ngoại thì sẽ tự động lấy class đối tượng rồi. Dĩ nhiên chắc chắn thiết kế sẽ không có loop. Nếu trong class trên như CBrand, CPackage, CTimezone, CAddress mà có User_ID là loop vô tận liền :) )
Chính vì vậy không thể thiết kế có Brand_ID, User_ID vào những table “system configuration” này.
}
Logic Member Method
Về logic sẽ có các methods tương ứng với: CheckIf… If…
Is… (đặc biệt là các member là boolean)
VD:
CheckIfUserIsVerified()
IfEmailAddressVerified() IsAutoApplyTicket()
Cũng có những methods về so sánh đối tượng:
Boolean IsEqual()
Boolean IsGreaterThan()
Vd if (aVersion.IsGreaterThan(aVersion2) == true)
If aUser.isEqual(aUserInOtherBrand) == true ...{}
Last updated