#c# #oop
#c# #ооп
Вопрос:
Я работаю над системой управления сотрудниками. Каждый сотрудник принадлежит к одному отделу, когда сотрудник входит в систему, я сохраняю userId и DepartmentID в своем классе, как показано ниже
internal static class MyStaticData
{
internal static Guid UserId { get; set; }
internal static Guid DepartmentId { get; set; }
}
Когда пользователь переходит на страницу create leave application и нажимает кнопку save, мне нужно отправить как userId, так и DepartmentID для сохранения в базе данных, так каков правильный способ отправки userId и DepartmentID на эту страницу между
// Create instance property inside the class and assign it when create new object.
public class LeavePage
{
public Guid UserId { get; set; }
public Guid DepartmentId { get; set; }
}
var leavePage = new LeavePage { UserId = MyStaticData.UserId, DepartmentId = MyStaticData.DepartmentId };
или
// Don't have instance property inside the class but use MyStaticData directly
public class LeavePage
{
public void Save()
{
Db.Save(data, ..., MySataicData.UserId, MyStaticData.DepartmentId);
}
}
Я не уверен, какой из них лучше (меньше сцепления) или у него есть лучший способ сделать это?
Комментарии:
1. Вы говорите о «покинуть страницу». Вы разрабатываете веб-приложение? Тогда статические пользовательские данные — плохая идея.
2. Вы путаете членов класса статических объектов с постоянными членами экземпляра? Статические члены являются общими для всех экземпляров вашего класса. Вероятно, вы захотите использовать закрытую константу для идентификаторов пользователя и отдела, поскольку они являются переменными для разных пользователей.
3. @DanielB: Это оконное приложение.
4. @DanielB: Почему статические пользовательские данные — плохая идея?
5. @Akram Shahda: В веб-приложении (asp.net ) статические переменные являются общими для всего приложения и не имеют области действия запроса, поэтому каждый пользователь переопределит статическую переменную для других со своими собственными данными.
Ответ №1:
Возможно, вы захотите попробовать использовать статический экземпляр какого-нибудь более общего класса — что-то вроде этого:
public class User
{
public Guid Id { get; set; }
public Guid DepartmentId { get; set; }
}
public static class SessionContext
{
public static User CurrentUser { get; set; }
}
Затем используйте SessionContext.CurrentUser при сохранении.
Конечно, в этом случае использование статического класса, вероятно, неуместно, и вам следует обратиться к экземпляру, зависящему от сеанса.
Ответ №2:
Если нет необходимости включать экземпляры ваших значений в ваш класс, не делайте этого.