Какой из них лучше класса Singleton или общих (статических) функций-членов - PullRequest
0 голосов
/ 09 августа 2011

Я хотел бы понять плюсы и минусы в использовании часто используемых методов через класс Singleton против общих (статических) членов класса в VB.Net.Это может быть с точки зрения времени, сложности пространства или лучших практик

У меня есть класс BankAccount с методами, выполняющими некоторую бизнес-логику.

GetBalance()
GetLast5Credits()
GetMiniStatement()

и некоторые операции записи.

В этом сценарии какой метод доступа к функциям-членамлучше?Shared или Singleton?

Ответы [ 4 ]

4 голосов
/ 09 августа 2011

Ни.Вы должны использовать внедренный экземпляр зависимости.т.е. вы не строите предположение, что в вашем коде есть только один экземпляр.Вы просто создали один экземпляр.Таким образом, вы можете легко изменить свое программное обеспечение, чтобы использовать более одного экземпляра.

Основная идея здесь заключается в том, что вы берете банковский счет в качестве параметра в конструкторе ваших классов:

class MyClass
{
  private readonly IBankAccount bankAccount;

  public MyClass(IBankAccount bankAccount)
  {
    this.bankAccount=bankAccount;
  }
}

Поскольку создание такого класса вручную может раздражать, если вам нужно передать много вещей, вы обычно используете инжектор зависимостей / контейнер IoC, чтобы сделать это за вас.


Следует использовать статические методыдля вспомогательных функций без побочных эффектов без состояния.Math и Enumerable имеют хорошие примеры для статических методов.

В общем, вам следует избегать глобального изменяемого состояния.И банковский счет явно изменчив.Здесь классический синглтон - меньшее зло (вы можете заменить реализацию для целей тестирования), но это все равно плохой выбор.

1 голос
/ 09 августа 2011

Я не верю, что вы тоже хотите здесь ...

но для дальнейшего использования класс Shared, как вы его называете, не должен иметь ничего общего с поддержанием состояния - каждый статический метод должен работать только с переданными параметрами. Это делает этот тип класса полезным только для служебных функций.

Синглтон будет полезен только в том случае, если вы сохраняете данные, относящиеся к учетной записи, в памяти. Тогда вы могли бы внедрить синглтон в качестве индексатора, содержащий набор записей банковских счетов, но вы должны помнить об условиях гонки.

1 голос
/ 09 августа 2011

зависит от того, будет ли в вашем заявлении более одного банковского счета.По сути, Static или Singleton означает, что вы можете иметь только один экземпляр рассматриваемого объекта - в этом случае BankAccount.Банк, у которого есть только один банковский счет, - очень плохой банк, если вы спросите меня.:) Здесь - довольно приличное объяснение, но пример кода на C #

0 голосов
/ 09 августа 2011

Лично я предпочитаю синглтон-класс для юнит-тестирования.Вы можете издеваться над классом экземпляра, но не можете имитировать статический класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...