Наличие Layer Supertype не может быть плохой идеей, но я думаю, что ваш запах кода может указывать на что-то еще. Джеффлан упомянул шаблон рефакторинга, Ввести объект параметров . Несмотря на то, что это хороший пример для такого рода проблем, я не совсем уверен, что именно так можно и поступить.
Вопрос: Почему вы передаете объекты модели домена конструктору?
Существует такая вещь, как слишком много абстракции. Если есть один надежный слой кода, которому вы должны доверять, это ваша модель домена . Вам не нужно ссылаться на 3 объекта IEntity, когда вы имеете дело с классами Customer, Vendor и Product, если они являются частью вашей базовой доменной модели и вам необязательно нужен полиморфизм.
Мой совет: перейдите в приложение и домен Службы . Доверьтесь своей доменной модели.
EDIT:
Перечитывая проблему, когда не страшно поздно ночью, я понимаю, что ваш "класс домена" уже является рефакторингом объекта ввода параметров, а не фактически супертипом слоя, как я думал в 3 часа ночи.
Я также понимаю, что, возможно, вам нужно ссылаться на объекты Model в коде приложения вне Presenter. Возможно, вы выполняете некоторую начальную настройку объектов Model, прежде чем передать их в Presenter. Если это так, то ваша идея «класса домена» может быть лучшей. Если есть некоторые начальные настройки, при переходе на IoC вы захотите посмотреть что-то вроде Factory Support в Castle Windsor. (Другие контейнеры IoC имеют аналогичные концепции.)