Лучшая практика Используя введенные наборы данных XSD C# В Корпоративных приложениях

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

1) Вы думаете, что информация о XSD должна быть расположена как часть Модели?

2) Это означает, что Уровень доступа к данным возвращает Наборы данных и другие сгенерированные объекты?

3) Это проходит все системные слои полностью к UI?

4) Если XSD является частью Уровня доступа к данным, я должен преобразовать результаты в объекты из Модели? Что такое лучшая методология преобразования?

Спасибо, Ronny

6
задан this. __curious_geek 20 January 2010 в 14:17
поделиться

1 ответ

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

-121--3787409-

Попробуйте

Regex.Replace(YOURTEXT, "(.{8})", "$1 ");
-121--4950751-

Вы ограничили назначение и приложения XSD, сделав XSD специфичными для наборов данных в вашем вопросе.

XSD - аббревиатура расширяемой дефинации Scehma. Определены стандарты XSD W3C ради стандартизации XML-файлы, которые можно использовать в приложения.

Например, в приложении широко используются XML-файлы, которыми можно обмениваться с различными типами удаленных источников. Эти источники могут отправлять файлы XML в различных форматах. В приложении необходимо обеспечить получение XML-файла в правильном формате, чтобы можно было выполнять бизнес-операции с XML-файлом. Поэтому необходимо обеспечить стандартизацию этих XML-файлов. Необходимо проверить XML-файл на соответствие приемлемым стандартам в конце. Необходимо сравнить схему XML со стандартами. Эти стандарты написаны в форме XSD. Также выполняется проверка схемы XML-файла на соответствие стандартам схемы, определенным в XSD-файле. Это фактическое назначение XSD-файлов.

Теперь ответьте на ваши вопросы..

1.) Считаете ли вы, что информация XSD должна быть найдена как часть модели?

Поскольку я только что сказал, что файл XSD хранит схему, а не данные. Таким же образом в любом приложении при использовании наборов данных, которые фактически содержат данные в памяти во время выполнения, будет также иметь собственную схему, форму, в которой они будут хранить данные. Они различаются в зависимости от базовых таблиц данных и их отношений. Так MS ребята ввели понятие TypedDataSets. TypedDataSets - как предполагает имя, являются квалифицированной схемой набора данных, который будет использоваться во время выполнения для воспроизведения данных. Таким образом, TypedDataSets фактически определяются в виде XSD-файла, который определяет схему DataTables и взаимосвязи между ними. Таким образом, при создании файла TypedDataSet в Visual Studio в основном создается XSD-файл. Все таблицы, добавляемые из источника базы данных на поверхность TypedDataSet, будут проанализированы, а схема метаданных каждой таблицы будет создана в XSD-файле. Во время выполнения при выборе записей в наборе данных вы уже знаете, какой тип данных поступает в них, и если данные находятся не в форме, определенной в XSD, вы получите исключение во время выполнения.

По-прежнему XSD не являются инструментальными во время выполнения, поскольку Visual Studio генерирует базу кодов набора данных tpyed из файла XSD с помощью инструмента XSD.exe .

2) это означает, что Слой Доступа к данным возвращает Наборы данных и другие произведенные объекты?

, Если Ваш слой данных использует TypedDataset, Он возвратит DataTables или DataRow [] или DataRow, как вам нужно.

3) Проходит ли он через все уровни системы все пути к пользовательскому интерфейсу?

Поверх него можно создавать пользовательские бизнес-объекты, что является рекомендуемой практикой, а не выбрасывать объекты Dataset в приложение.

4) Если XSD является частью уровня доступа к данным, следует ли преобразовывать результаты в объекты из модели? Что лучше всего использовать для преобразования?

Запишите механизм отображения с помощью Reflection. Мы сопоставляем экземпляры DataRow с экземплярами бизнес-объектов и DataTables с коллекциями бизнес-объектов.

Вы можете начать перепроектирование, чтобы увеличить масштаб проекта с помощью более ремонтопригодной архитектуры. И, конечно, это потребует времени и усилий, но в конечном итоге у вас будут отличные результаты.

Это то, что у меня есть в проекте.

1.) Приложение .Инфраструктура

  • Базовые классы для всех businessobjects, коллекции объектов busines, классов доступа к данным и моих пользовательских атрибутов и утилит в качестве методов расширения, Общая структура проверки. Это определяет общую организацию поведения моего окончательного приложения .net.

2.) Application.DataModel

  • Набор данных XSD для базы данных.
  • Адаптеры таблицы расширены для включения транзакций и других функций, которые могут мне понадобиться.

3.) Application.DataAccess

  • Классы доступа к данным.
  • Фактическое место, где выполняется запрос действий базы данных с использованием базового набора типизированных данных.

4.) Application.StartObjects

  • Бизнес-объекты и коллекции бизнес-объектов.
  • Перечисления.

5.) .Бус Приложения Слой

  • Предоставляет классы менеджера, доступные из уровня представления.
  • Обработчики кода.
  • Мой собственный базовый класс Page.
  • Больше вещей идет здесь..

6.) Приложение .WebClient или Приложений .WindowsClient

  • Мой уровень представления
  • Берет ссылки из Приложения .Bus

Application.StartObjects используются в приложении и перемещаются по всем уровням, когда это необходимо [кроме Application.DataModel и Application.Infrastructure]

Все мои запросы определены только как Application.DataModel.

Application.DataAccess возвращает или принимает бизнес-объекты как часть любой операции доступа к данным. Бизнес-объекты создаются с помощью атрибутов отражения. Каждый бизнес-объект помечается сопоставлением атрибутов с целевой таблицей в базе данных, а свойства в пределах бизнес-объекта помечаются сопоставлением атрибутов с целевым столбцом в соответствующей таблице базы данных.

Моя структура проверки позволяет проверить каждое поле с помощью назначенного ValidationAttribute.

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

Пример бизнес-объекта будет выглядеть следующим образом в моем приложении.

User.cs

[TableMapping("Users")]
public class User : EntityBase
{
    #region Constructor(s)
    public AppUser()
    {
        BookCollection = new BookCollection();
    }
    #endregion

    #region Properties

    #region Default Properties - Direct Field Mapping using DataFieldMappingAttribute

    private System.Int32 _UserId;

    private System.String _FirstName;
    private System.String _LastName;
    private System.String _UserName;
    private System.Boolean _IsActive;

    [DataFieldMapping("UserID")]
    [DataObjectFieldAttribute(true, true, false)]
    [NotNullOrEmpty(Message = "UserID From Users Table Is Required.")]
    public override int Id
    {
        get
        {
            return _UserId;
        }
        set
        {
            _UserId = value;
        }
    }

    [DataFieldMapping("UserName")]
    [Searchable]
    [NotNullOrEmpty(Message = "Username Is Required.")]
    public string UserName
    {
        get
        {
            return _UserName;
        }
        set
        {
            _UserName = value;
        }
    }

    [DataFieldMapping("FirstName")]
    [Searchable]
    public string FirstName
    {
        get
        {
            return _FirstName;
        }
        set
        {
            _FirstName = value;
        }
    }

    [DataFieldMapping("LastName")]
    [Searchable]
    public string LastName
    {
        get
        {
            return _LastName;
        }
        set
        {
            _LastName = value;
        }
    }

    [DataFieldMapping("IsActive")]
    public bool IsActive
    {
        get
        {
            return _IsActive;
        }
        set
        {
            _IsActive = value;
        }
    }

    #region One-To-Many Mappings
    public BookCollection Books { get; set; }

    #endregion

    #region Derived Properties
    public string FullName { get { return this.FirstName + " " + this.LastName; } }

    #endregion

    #endregion

    public override bool Validate()
    {
        bool baseValid = base.Validate();
        bool localValid = Books.Validate();
        return baseValid && localValid;
    }
}

BookCollection.cs

/// <summary>
/// The BookCollection class is designed to work with lists of instances of Book.
/// </summary>
public class BookCollection : EntityCollectionBase<Book>
{
    /// <summary>
    /// Initializes a new instance of the BookCollection class.
    /// </summary>
    public BookCollection()
    {
    }

    /// <summary>
    /// Initializes a new instance of the BookCollection class.
    /// </summary>
    public BookCollection (IList<Book> initialList)
        : base(initialList)
    {
    }
}
7
ответ дан 17 December 2019 в 00:09
поделиться
Другие вопросы по тегам:

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