“” По сравнению с, “Имеет a”: какой лучше?

Вот как можно определить модель:

export interface Abc {
  date: Date;
  time: string;
  ABC_Info: {item: string, quantity: number, a: number}[]
}

А затем в вашем http-сервисе:

getAbc(): Observable<Abc> {
  return this.http.get('some api').pipe(map(res => res.json)); // Remove pipe if angular version is below 6
}
8
задан Uwe Keim 5 June 2018 в 06:22
поделиться

7 ответов

Я голосую с другими людьми, которые, как то, кто говорит, ИМЕЕТ - A лучше в этом случае. Вы спрашиваете в комментарии:

то, когда я говорю, что Портфель является просто набором фондов с несколькими собственными атрибутами как TotalPortfolio и т.д., разве который существенно не становится, "-a"?

Я так не думаю. Если Вы говорите Portfolio ISA List<Fund>, что относительно других свойств Портфеля? Конечно, Вы можете добавить свойства к этому классу, но являетесь им с точностью до модели те свойства как свойства Списка? Поскольку это в основном, что Вы делаете.

Также, что, если Портфель требуется, чтобы поддерживать больше чем один List<Fund>? Например, у Вас мог бы быть один Список, который показывает текущий баланс инвестиций, но другой Список, который показывает, как инвестируют новые вклады. И что относительно того, когда фонды прекращены, и новый набор фондов используется для следования за ними? Историческая информация полезна для дорожки, а также текущего выделения фонда.

Дело в том, что все эти свойства не являются правильно свойствами Списка, хотя они могут быть свойствами Портфеля.

17
ответ дан 5 December 2019 в 04:46
поделиться

Первый, потому что необходимо попытаться одобрить состав по наследованию, когда Вы можете.

7
ответ дан 5 December 2019 в 04:46
поделиться

не 'всегда' одобряйте состав или наследование или наоборот; у них есть другая семантика (значения); посмотрите тщательно на значения, затем решите - не имеет значения, если Вы 'легче', чем другой, для долговечности имеет значение, что Вы разбираетесь в семантике

помните: - = тип, имеет - = включение

так в этом случае портфель логически является набором фондов; сам портфель не является типом фонда, таким образом, состав является корректными отношениями

Править: Я неправильно читал вопрос первоначально, но ответ является все еще тем же. Портфель не является типом списка, это - отличный объект со своими собственными свойствами. Например, портфель является агрегатом финансовых инструментов с начальной инвестиционной стоимостью, общим текущим значением, историей значений со временем, и т.д., в то время как Список является простым набором объектов. Портфель является 'типом списка' только в самом абстрактном смысле.

РЕДАКТИРОВАНИЕ 2: думайте об определении портфеля - это, без исключения, названного набором вещей. Портфель художника является набором их иллюстраций, портфель веб-дизайнера является набором их веб-сайтов, портфель инвестора состоит изо всех финансовых инструментов, которыми они владеют и так далее. Так ясно нам нужен список (или некоторый вид) для представления портфеля, но это никоим образом не подразумевает, что портфель является типом списка!

предположите, что мы решаем позволить Портфелю наследоваться Списку. Это работает, пока мы не добавляем Запас или Связь или Драгоценный металл к Портфелю, и затем внезапно неправильное наследование больше не работает. Или предположите, что нас просят смоделировать, скажем, портфель Bill Gates' и найти, что Список исчерпает память ;-) Более реалистично после будущего, осуществляя рефакторинг мы, вероятно, найдем, что должны наследоваться базовому классу как Актив, но если мы уже наследовались Списку затем, мы не можем.

Сводка: различайте структуры данных, мы принимаем решение представить понятие, и семантика (введите иерархию) самого понятия.

8
ответ дан 5 December 2019 в 04:46
поделиться

Это зависит, определяет ли бизнес Портфель как группу (и только группу) фондов. Если существует даже удаленная возможность, относительно которой это могло содержать другие объекты, сказать "свойство", то пойдите с опцией 1. Пойдите с опцией 2, если существует прочная связь между группой фондов и понятием Портфеля.

До расширяемости и полноценности 1 имеет небольшое преимущество перед 2. Я действительно не соглашаюсь с понятием, которое необходимо всегда одобрять один по другому. Это действительно зависит от того, каковы фактические реальные понятия. Помните, Вы можете always^ осуществлять рефакторинг.

^ Для большинства экземпляров всегда. Если это выставляется публично, то, очевидно, нет.

4
ответ дан 5 December 2019 в 04:46
поделиться

Первый, потому что это, "состоит из". => Состав

2
ответ дан 5 December 2019 в 04:46
поделиться

Я пошел бы с опцией (1) - состав, так как у Вас могут в конечном счете быть атрибуты, характерные для портфеля, а не фондов.

2
ответ дан 5 December 2019 в 04:46
поделиться

Я не соглашусь с тем, что, кажется, единое мнение. В этом случае я думаю, что портфель - еще много, чем набор фондов... При помощи наследования Вы позволяете использование нескольких конструкторов, как в

public Portfolio(CLient client) {};
public Portfolio(Branch branch, bool Active, decimal valueThreshold)
{
    // code to populate collection with all active portfolios at the specified branch whose total vlaue exceeds specified threshold 
}

и индексаторы как в:

public Fund this[int fundId] { get { return this.fundList[fundId]; } }

и т.д. и т.д.

если Вы хотите смочь рассматривать переменные Портфеля типа как набор фондов со связанным синтаксисом, то это - лучший подход.

Portfolio BobsPortfolio = new Portfolio(Bob); 

foreach (Fund fund in BobsPortfolio)
{
    fund.SendStatement();
}

или материал как этот

1
ответ дан 5 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: