Я не буду беспокоить вас теорией , потому что вы, вероятно, спешите получить быстрый ответ.Итак, вот так:
Если два ваших класса на самом деле подразумевают, что они должны быть связаны наследованием, тогда ProjectGroup
должно наследоваться от Project
класса.Вот как это будет выглядеть в C #:
public class ProjectGroup: Project ...
Если это не так, но они используют некоторые общие члены класса (которые определяют их состояние и некоторые функции над этим состоянием), то я бы написалинтерфейс и реализовать его в обоих классах.Код C # снова:
public interface ICommonState ...
public class Project: ICommonState ...
public class ProjectGroup: ICommonState
{
IEnumerable<ICommonState> projects
...
}
Редактировать
Если ваши классы на самом деле Project
и ProjectGroup
, и они оба имеют общие свойства, например ID
и Name
(например,), они все еще не должны быть унаследованы.У них просто есть свойства с одинаковыми именами, но в основном это разные сущности.
Они оба могут
- реализовать интерфейс
ICommonEntity
- использовать его, когда у них естьто же состояние + функциональность, но функциональность ведет себя по-разному в каждом из них - наследуется от
CommonEntity
класса - используйте его, когда функциональность полностью идентична;таким образом вы будете следовать философии DRY (не повторяйтесь)
Таким образом, ваш компонент может быть интерфейсом или классом (при использовании составного шаблона).
Прямое наследование между двумя классами больше подходит, когда сущности подразумевают связь друг с другом.Как User
и Person
классы.Они могут быть унаследованы в любом случае.В зависимости от бизнес-сценария.
class User: Person
Это может быть в случае, когда у вас есть приложение с контактами.Некоторые из них также являются пользователями этого самого приложения.
class Person: User
Это будет веб-сайт, где вы можете зарегистрироваться как пользователь.В случае, если вы заполняете некоторые личные данные, ваши пользовательские данные становятся типа Person
.