ООП Дизайн для экономики - PullRequest
0 голосов
/ 17 апреля 2010

Не знаю, с чего начать, поэтому я просто собираюсь рассказать. Допустим, я пытаюсь представить экономику в ООП. Базовый дизайн, который я придумал:

class Person{
  int $money; // Money someone has in wallet/purse
  int $bank_account_id;

  function getAmountOfMoney()
  function addMoney($amountToAdd)
  function subtractMoney($amountToSubtract)
}

class BankAccount{
  int $money; // Money in Bank Account
  int $interest_per_year;

  function giveInterest()
  function depositMoney() // Calls $person->subtractMoney()
  function withdrawMoney() // Calls $person->addMoney()

}

Есть ли здесь недостатки дизайна?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2010

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

Если вы хотите изучить хорошие принципы развития ОО, я бы посоветовал взглянуть на S.O.L.I.D: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod (+ 100 других ссылок)

1 голос
/ 17 апреля 2010

Сразу замечу, что человек и банковский счет не являются отношениями 1: 1. Сберегательный и чековый счет, сразу, например. Или у некоторых людей было бы несколько банков, или я знаю, как мои родители, несколько счетов в одном и том же банке. Хранение $bank_account_id в Person - это то, что я имею в виду.

Было бы лучше иметь массив, содержащий все учетные записи, которые есть у человека.

Кроме того, если у вас есть личный идентификатор, вероятно, он также должен быть в BankAccount.

Аналогично с depositMoney() и withdrawMoney(), они работают на Person, когда они должны работать над собой, с Person доступ к BankAccount не наоборот.

По сути, у вас есть отношения между двумя классами несколько в обратном направлении от того, как было бы представлять реальное (и практическое) использование.

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