System.Drawing.Image для изображений в бизнес-объектах? - PullRequest
1 голос
/ 03 ноября 2008

Я хотел бы сохранить изображение в бизнес-объекте. В MSDN я увидел, что пространство имен System.Drawing предоставляет множество функций GDI + и т. Д.

Можно ли хранить изображение в классе System.Drawing.Image на бизнес-уровне (который является "только" библиотекой классов) и, таким образом, включать ссылку на System.Drawing? Я немного плохо себя чувствую, потому что мне кажется, что в бизнес-коде есть ссылки на пользовательский интерфейс. Более того, код может стать излишне зависимым от платформы (хотя это теоретически проблема, потому что мы не разрабатываем для нескольких платформ).

Если это не так, то какой тип подойдет лучше всего?

Спасибо за любой ответ!

Matthias

1 Ответ

2 голосов
/ 03 ноября 2008

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

Если вы чувствуете, что изображения не имеют места в библиотеке классов, один взгляд System.Drawing * должен убедить вас в обратном: это яркий пример библиотеки классов (и очень прилично разработанный ) что в значительной степени ничего не делает, кроме как работать с изображениями.

Это на самом деле не имеет ничего общего с пользовательским интерфейсом (Windows.Forms и друзья имеют дело с ними). Кроме того, System.Drawing присутствует в любой системе с установленным .NET Framework, поэтому проблем с зависимостями нет.

Если вы беспокоитесь о кроссплатформенной совместимости, создание класса-обертки для изображений может облегчить эти проблемы. Однако, поскольку сами растровые структуры, скорее всего, уже зависят от платформы (например, если вы не позаботитесь о том, чтобы использовать PNG только на ваших внешних интерфейсах), это может быть немного чрезмерно, поскольку вы добавляете сложность без усиления. ..

...