Это правильный дизайн MonoState?

У меня есть Person Класс и на основе какой-то помощи я получил в этом посте.

MonoState, Singleton или производные формы: лучший подход для приложения CRUD?

у меня есть CurrentPerson класс вокруг (??) это, и я получаю доступ к данным через это.

Я думаю, что понимаю, как это должно работать, но мне кажется, что я не совсем прав.

Вопросы:

  1. Для начала не следует Person и все его переменные-члены должны быть приватными?

  2. Почему Personкогда объявлено в CurrentPersonстатичный? Это правильно?

  3. 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);
Другие вопросы по тегам