Существует ли преимущество для использования DTO, а не общей ссылки на Объекты в общем блоке?

Преобразование System.Drawing.Bitmap в System.Windows.Media.Imaging.BitmapSource или System.Windows.Media.ImageSource (базовый класс) имеет вид очень легко, но вы должны быть осторожны.

Во-первых, и все, что вам нужно, - утилизировать файл System.Drawing.Bitmap каждый раз, когда вы его используете. Таким образом, вы освобождаете пространство в своей памяти

. Преобразование может быть выполнено двумя способами. Использование GDI или потока памяти. Лично я предпочитаю способ GDI. Также GDI позволит вам использовать графический процессор вместо центрального процессора. Это то, что вы хотите, если вы собираетесь визуализировать визуальные эффекты.

ПУТЬ ПОТОКА ПАМЯТИ

 public static System.Windows.Media.ImageSource ToImageSource2(this Bitmap bitmap)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            bitmap.Save(stream, ImageFormat.Bmp);
            stream.Position = 0;
            System.Windows.Media.Imaging.BitmapImage result = new System.Windows.Media.Imaging.BitmapImage();
            result.BeginInit();
            result.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
            result.StreamSource = stream;
            result.EndInit();
            result.Freeze();
            return result;
        }
    }

ПУТЬ GDI

[DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteObject([In] IntPtr hObject);
public static System.Windows.Media.ImageSource ToImageSource(this Bitmap bitmap)
{
    System.Windows.Media.ImageSource image;
    IntPtr handle = bitmap.GetHbitmap();
    try
    {
        image = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, System.Windows.Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
        image.Freeze();
    }
    finally
    {
       DeleteObject(handle);
    }


    return image;
}

ОБРАЗЕЦ ТЕСТА

[ 112]

11
задан 7 March 2009 в 12:44
поделиться

3 ответа

Ну, я едва вижу (b), используемый на практике. Я использую подход, описанный в (c) большинство времен (другие времена, когда я даже не отделяюсь между BLL/DAL или имею модель предметной области вообще). В конце концов, бизнес и компоненты данных обычно физически соразмещаются, таким образом, это просто для ФИЛИАЛА, который будет совместно использован этими двумя. На самом деле платформам нравится, в спящем режиме, Платформа Объекта, Linq2Sql и т.д. на самом деле поощряет (c), позволяя один выполнять ORM для сложной модели предметной области.

DTO более обычно используется для передачи данных от BLL до UI, хотя, особенно когда UI и BLL развертываются в отдельных серверах. В этом случае UI, вероятно, будет нужно упрощенное представление модели предметной области, чтобы уменьшить межпроцессные распространения в прямом и обратном направлениях и минимизировать влияние изменения (когда изменения модели предметной области).

3
ответ дан 3 December 2019 в 11:38
поделиться

Я не был бы удивлен, был ли (c) довольно распространен. И если Ваш BLL и UI находятся на другом сервере, можно также передать объекты по проводу при использовании WCF. Смотрите на этот пример для того, как сделать сериализацию объектов здесь [zip] и здесь являетесь ссылкой на страницу загрузок. Это сообщение могло бы также помочь с сериализацией с WCF

1
ответ дан 3 December 2019 в 11:38
поделиться

ПРИЛОЖЕНИЕ к исходному Вопросу:

Я думаю (после того, как первый ответ, Buu Nguyenthat следующий Ссылочный шаблон будет совершенно приемлем, и возможно даже рекомендуемый с LINQ и т.д.:

BLL > 

 v    Business Entities Layer (BEL)

DAL >

Если BLL и DAL не находятся на различных уровнях, и BLL связывается с DAL через WCF...? В этом случае это не будет работать (Предприятия, возвращенные DAL через WCF, будут сериализированы, и и на стороне BLL будет десериализован в Прокси исходного BE's... и не отобразился назад на BE's сами. Или то, что очевидно неправильно, и вышеупомянутый ссылочный шаблон будет работать на то, когда BLL и DAL находятся в том же уровне, а также в различных уровнях?

ПРИЛОЖЕНИЕ № 2: Найденный интересной ссылкой, относительно почему его на самом деле хорошее для использования внешнего блока для Филиала. Он заявляет, что "Это - нарушение правила, что слой должен только знать о слое immediatly ниже, но база данных, которая диктует имена столбцов, не непосредственно ниже BLL, который это ниже DAL. Так не введенные DataSets не экранируют Вас от базы данных, и именно поэтому я думаю, что они неправы. Лучшее решение состояло бы в том, чтобы использовать объекты со строгим контролем типов, определенные в отдельном проекте. Так, например, будет класс Учителя в DTO со свойством Name, но без метода Класса".

1
ответ дан 3 December 2019 в 11:38
поделиться
Другие вопросы по тегам:

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