Ответы пользователя по тегу Паттерны проектирования
  • MVC. Может ли быть что-нибудь общедоступным?

    @veitmen
    Ошибка в понимании есть. Вы класс Human рассматриваете как одну из частей MVC. Это не совсем так, Human, это как раз и есть те данные, которые отображает VIew, процессит контроллер и извлекает модель. Если вы поменяете данные, то ведь нужно изменить отображение, обработку и то, как они достаются. От этого никуда не денешься и в этом нет ничего страшного. НА текущий момент изменение структуры данных, не так страшно, как было раньше. Технологии позволяют генерировать как БД, так и модели, контроллеры и вьюхи, не делая это руками. Но не стоит злоупотреблять, все должно быть в меру. А то помню, как на одном проекте пытались генерить по модели абсолютно все что только можно, начиная от БД, заканчивая скриптами на клиенте. Ад получался.

    В целом да, о данных с которым идет работа знают все слои MVC. Иначе бы непонятно было бы, что делать, что отображать и т.д. Также советую рассматривать Human, как DTO, это так называемый Data Transfer Object, объект, который транспортирует данные, как некая посылка. Вы даже не рушите объектного подхода при использовании DTO, как некоторые думают.
    Ответ написан
    1 комментарий
  • Логирование через синглтон?

    @veitmen
    Приветствую.
    LogManager.GetCurrentClassLogger()
    Использовать следует тогда, когда вы хотите использовать отдельный логгер для каждого класса и имя логгера будет совпадать с именем класса.
    Пример правильного использования:
    namespace MyNamespace
    {
      public class MyClass
      {
        private static Logger logger = LogManager.GetCurrentClassLogger();
      }
    }

    Далее всегда используете в своем классе для логирования logger.
    Подробнее тут: https://github.com/NLog/NLog/wiki/Tutorial#creatin...

    Если вы хотите сделать общий класс логирования и везде его использовать, то сделайте статический класс Logger, в нем реализуйте нужные вам методы логирования, которые будут использовать NLog. Т.е. примерно так:
    namespace MyNamespace
    {
      public static class MyClass
      {
        private static Logger logger = LogManager.GetLogger("MyCoolLogger");//или упомянутый GetCurrentClassLogger()
    
       public static void Debug(string message){
          logger.Log(message);
       }
    ...
      }
    }

    Собственно так используете:
    Logger.Debug("Hello!");
    Это простое решение, но я бы не советовал его использовать.

    Я бы советовал использовать отдельный логгер для каждого класса, это BestPractise. Это позволит вам проще ориентироваться в логах, т.к. каждый логгер будет указывать на свой класс.
    Ответ написан
    Комментировать