Это правильный дизайн MonoState?
У меня есть Person
Класс и на основе какой-то помощи я получил в этом посте.
MonoState, Singleton или производные формы: лучший подход для приложения CRUD?
у меня есть CurrentPerson
класс вокруг (??) это, и я получаю доступ к данным через это.
Я думаю, что понимаю, как это должно работать, но мне кажется, что я не совсем прав.
Вопросы:
Для начала не следует
Person
и все его переменные-члены должны быть приватными?Почему
Person
когда объявлено вCurrentPerson
статичный? Это правильно?Person
на самом деле есть дочерние объектыAddress
,Enrollment
, а такжеCaseNote
, Как мне их включить?CurrentEnrollment
обертка вокругEnrollment
?
Я довольно плохо знаком с ООП как прикладной наукой, поэтому некоторые из этих концепций мне сложно представить.
Код длинный, извиняюсь.
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public string SuffixID { get; set; }
public string TitleID { get; set; }
public string SocialSn { get; set; }
public string Gender { get; set; }
public string DlNumber { get; set; }
public string DlStateID { get; set; }
public string PrimaryRace { get; set; }
public string SecondaryRace { get; set; }
public string EmailAddress { get; set; }
public string MaritalStatus { get; set; }
public string InsertProgram { get; set; }
public string InsertUserID { get; set; }
public string UpdateProgram { get; set; }
public string UpdateUserID { get; set; }
public string LockID { get; set; }
public int PersonID { get; set; }
public int ClientID { get; set; }
public int ResidencyCountyID { get; set; }
public int ResponsibilityCountyID { get; set; }
public bool HispanicOriginFlag { get; set; }
public bool CitizenFlag { get; set; }
public bool VeteranFlag { get; set; }
public DateTime BirthDate { get; set; }
public DateTime DeathDate { get; set; }
public DateTime InsertDateTime { get; set; }
public DateTime UpdateDateTime { get; set; }
}
class CurrentPerson
{
public static Person Person { get; set; }
public string FirstName
{
get { return CurrentPerson.Person.FirstName; }
set { CurrentPerson.Person.FirstName = value; }
}
public string LastName
{
get { return CurrentPerson.Person.LastName; }
set { CurrentPerson.Person.LastName = value; }
}
public string MiddleName
{
get { return CurrentPerson.Person.MiddleName; }
set { CurrentPerson.Person.MiddleName = value; }
}
public string SuffixID
{
get { return CurrentPerson.Person.SuffixID; }
set { CurrentPerson.Person.SuffixID = value; }
}
public string TitleID
{
get { return CurrentPerson.Person.TitleID; }
set { CurrentPerson.Person.TitleID = value; }
}
public string SocialSn
{
get { return CurrentPerson.Person.SocialSn; }
set { CurrentPerson.Person.SocialSn = value; }
}
public string Gender
{
get { return CurrentPerson.Person.Gender; }
set { CurrentPerson.Person.Gender = value; }
}
public string DlNumber
{
get { return CurrentPerson.Person.DlNumber; }
set { CurrentPerson.Person.DlNumber = value; }
}
public string DlStateID
{
get { return CurrentPerson.Person.DlStateID; }
set { CurrentPerson.Person.DlStateID = value; }
}
public string PrimaryRace
{
get { return CurrentPerson.Person.PrimaryRace; }
set { CurrentPerson.Person.PrimaryRace = value; }
}
public string SecondaryRace
{
get { return CurrentPerson.Person.SecondaryRace; }
set { CurrentPerson.Person.SecondaryRace = value; }
}
public string EmailAddress
{
get { return CurrentPerson.Person.EmailAddress; }
set { CurrentPerson.Person.EmailAddress = value; }
}
public string MaritalStatus
{
get { return CurrentPerson.Person.MaritalStatus; }
set { CurrentPerson.Person.MaritalStatus = value; }
}
public string InsertProgram
{
get { return CurrentPerson.Person.InsertProgram; }
set { CurrentPerson.Person.InsertProgram = value; }
}
public string InsertUserID
{
get { return CurrentPerson.Person.InsertUserID; }
set { CurrentPerson.Person.InsertUserID = value; }
}
public string UpdateProgram
{
get { return CurrentPerson.Person.UpdateProgram; }
set { CurrentPerson.Person.UpdateProgram = value; }
}
public string UpdateUserID
{
get { return CurrentPerson.Person.UpdateUserID; }
set { CurrentPerson.Person.UpdateUserID = value; }
}
public string LockID
{
get { return CurrentPerson.Person.LockID; }
set { CurrentPerson.Person.LockID = value; }
}
public int PersonID
{
get { return CurrentPerson.Person.PersonID; }
set { CurrentPerson.Person.PersonID = value; }
}
public int ClientID
{
get { return CurrentPerson.Person.ClientID; }
set { CurrentPerson.Person.ClientID = value; }
}
public int ResidencyCountyID
{
get { return CurrentPerson.Person.ClientID; }
set { CurrentPerson.Person.ClientID = value; }
}
public int ResponsibilityCountyID
{
get { return CurrentPerson.Person.ResponsibilityCountyID; }
set { CurrentPerson.Person.ResponsibilityCountyID = value; }
}
public bool HispanicOriginFlag
{
get { return CurrentPerson.Person.HispanicOriginFlag; }
set { CurrentPerson.Person.HispanicOriginFlag = value; }
}
public bool CitizenFlag
{
get { return CurrentPerson.Person.CitizenFlag; }
set { CurrentPerson.Person.CitizenFlag = value; }
}
public bool VeteranFlag
{
get { return CurrentPerson.Person.VeteranFlag; }
set { CurrentPerson.Person.VeteranFlag = value; }
}
public DateTime BirthDate
{
get { return CurrentPerson.Person.BirthDate; }
set { CurrentPerson.Person.BirthDate = value; }
}
public DateTime DeathDate
{
get { return CurrentPerson.Person.DeathDate; }
set { CurrentPerson.Person.DeathDate = value; }
}
public DateTime InsertDateTime
{
get { return CurrentPerson.Person.InsertDateTime; }
set { CurrentPerson.Person.InsertDateTime = value; }
}
public DateTime UpdateDateTime
{
get { return CurrentPerson.Person.UpdateDateTime; }
set { CurrentPerson.Person.UpdateDateTime = value; }
}
}
PS Если Даниэль Брюкнер случайно прочитает это, пожалуйста, не обижайся, так как я не угадаю твой ответ; Мне просто нужно более глубокое разъяснение по некоторым пунктам, чтобы правильно понять использование моностата в моем приложении.
1 ответ
Относительно того, должны ли поля быть закрытыми, это просто новый (C# 3.0?) Способ объявления свойств без наличия вспомогательной переменной. Распространенным вариантом является
public string SomeProperty { get; protected set }
Конечно, как только вы захотите сделать что-то вроде проверки в установщике, это не сработает, и вы должны вернуться к написанию установщиков и получателей и объявлению резервной переменной.
Я не уверен, что цель статического CurrentPerson.Person()
метод, или как это устанавливается.
На третий вопрос, если я вас правильно понял, вы бы дали Person
класс свойство типа Address
и получить к нему доступ примерно так:
Console.WriteLine(somePerson.HomeAddress.City);