2009-09-09 5 views
2

У меня есть небольшая проблема с одним из моих проектов, у меня есть объект под названием «Изображение», которое используется для хранения информации о загруженных изображениях в системе CMS, которую я создал.Что делать с одноименными элементами

Это скрывает system.drawing.image, это не было проблемой, пока мне не пришлось начать делать манипуляции с изображениями на странице, которая использует оба класса.

На данный момент в декларациях у меня есть Using Image = myCMS.Entities.Image; Так при вызове изображения я использую свой объект, но при вызове system.drawing.image я должен ввести system.drawing.image

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

ответ

4

Помимо изменения имени вашего лица, ваши варианты действительно ограничены сглаживанием имен и/или полностью квалифицируют два встречных имени, как вы уже делаете.

Мое личное предпочтение было бы полностью квалифицировать имена обоих типов по всему источнику. Ваш текущий подход представляет собой сочетание как псевдонимов, так и квалификаций. Вы можете также в качестве альтернативы псевдоним обоих типов, чтобы что-то вроде:

using EntityImage = myCMS.Entities.Image; 
using DrawingImage = System.Drawing.Image; 
+0

Как грязное исправление, это хороший вариант, но я также согласен с Марком, что я должен был подойти к нему. Поскольку я использую генерацию кода, используя кузнец кода, я всегда стараюсь сделать таблицы, которые создают сущности очень описательные, но похоже, что мне нужно включить дополнительный уровень описания при работе с пространствами имен, которые будут конфликтовать. Спасибо всем за ваш ввод – JamesStuddart

+0

Я действительно начинал с возможности переименовать имя вашей сущности ... :-) –

0

Вы могли бы использовать что-то вроде:

using CmsImage = myCMS.Entities.Image; 
using Image = System.Drawing.Image; 

поэтому у вас есть четкое различие двух.

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

0

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

var cmsImage = new myCms.Entities.Image(); 
var drawingImage = new System.Drawing.Image(); 

псевдонимов, созданных с using очень трудно следовать, из моего опыта, и они делают код менее ясным.

0

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

1

Хотя это немного больно, лучшая стратегия заключается в том, чтобы избежать возможных конфликтов имен. В вашем случае вы не можете переименовать System.Drawing.Image, поэтому, если это вообще возможно, подумайте о переименовании вашего типа изображения в нечто более специфичное для вашей объектной модели (возможно, CmsImage или ImageEntity).

Это явное правило в .NET Design Guidelines:

Не дают типы имен, которые противоречили бы с любым типом в основных пространствах имен.

Очевидно, что вам не обязательно следовать этим правилам, но в целом я считаю, что они предлагают хороший совет.

Смежные вопросы