Я довольно новичок в ООП и кажусь повседневным, я изучаю его с трудом. Я и моя команда в настоящее время работают над довольно большим настольным приложением, созданным в C# Winforms.Мгновенное действие класса верхнего уровня
Проект я получил от моих зарубежных коллег структурирован приложением 3 слоя:
- DataLayer
- домена
- GUI
До сих пор так хорошо, дело в том, что в доменном слое у меня есть следующие классы.
-User.cs -UserBase.cs
User.cs структурирована таким образом:
/// <summary>
/// Top-level user class.
/// </summary>
public class User
{
public User()
{
userBase = new UserBase();
}
public IAdmUser userBase { get; set; }
public IEnumerable<IAdmGroup> AssGroups { get; set; }
}
И UserBase.cs структурирована таким образом:
public class UserBase:ObjectBase, IAdmUser
{
/// <summary>
/// The date that the user has been registered. The datetime is in UTC format.
/// </summary>
public DateTime RegistrationDate { get; set; }
/// <summary>
/// 0 = User is not Active, 1 = User is Active.
/// </summary>
public bool IsActive { get; set; }
/// <summary>
/// The username.
/// </summary>
public string UserName { get; set; }
/// <summary>
/// Description of the user.
/// </summary>
public string Description { get; set; }
/// <summary>
/// Firstname of the user.
/// </summary>
public string FirstName { get; set; }
/// <summary>
/// Lastname of the user.
/// </summary>
public string LastName { get; set; }
}
Каждый раз, когда мне приходится использовать свойства для заполнения нового объекта типа User, я должен его создать следующим образом:
var newUser = new User
{
userBase =
{
FirstName = "name1",
LastName = "name2",
Description = "Junior Developer",
IsActive = true,
State = ObjectState.Added,
RegistrationDate = DateTime.Now,
UserName = "ASD"
}
};
ИЛИ
// without object initializer
var newUser = new User()
newUser.userBase.PropertyName = "Assign property value"
Так в основном, если я просто делаю: var user = new User()
, я не буду иметь доступ к полям FirstName, LastName
и т.д. Я должен идти вниз уровень как newUser.userBase.PropertyName
.
Я не понимаю, что это за UserBase.cs, единственное, что у меня есть, это то, что User.cs
является только контейнером для UserBase.cs
.
Я прошу помочь здесь, потому что у коллеги, который разработал эту «структуру», есть некоторые проблемы, и он не работает.
Спасибо, и сожалею, если это станет дубликат почты, честно говоря, я даже не уверен, что спросить.
Он смотрит на меня, как если бы писатель не понимал наследование в C# слишком хорошо, когда первым написал этот код, или имел повод не позволять пользователю наследовать от userbase ... в любом случае вам придется подождать, пока ваш коллега не вернется на работу или не спросит окружающих вас людей – Sayse
, если пользователь «является» базой пользователей. Используйте «User: UserBase». Если пользователь имеет «пользовательскую базу», ваша реализация должна быть в порядке. Может быть, вам нужен шаблон дизайна, который заполняет ваши свойства. –
Наличие userBase = new UserBase() в конструкторе - довольно большая проблема. Это просто вздор, он ничего не конструирует. Архитектор, не появляющийся на работе, должен сильно беспокоить вас. Высокие шансы, что кто-то должен сказать «Стоп!». до того, как он превратится в катастрофу проекта. Мы не можем сказать это вам, поговорим с членами команды и руководителем. –