Как Уровень доступа к данным должен быть структурирован?

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

Когда я захотел протестировать свое приложение на разных версиях телефонов Samsung, я импортировал профили оборудования с их веб-сайта: в качестве примера проверьте ссылку ниже, вы можете скачать zip-файл и затем загрузить его в Android Studio.

https://developer.samsung.com/technical-doc/view.do?v=T000000287

Но на самом деле создать профиль оборудования неэффективно, пока возможно, но я не рекомендую, если вам нужен конкретный телефон, зайдите на их сайт и установите их пакеты.

10
задан Forgotten Semicolon 24 October 2008 в 15:58
поделиться

5 ответов

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

Таким образом, мой подход был бы, чтобы иметь репозиторий для каждого агрегата, которому нужен он, такие как CustomerRepository. Это имело бы Добавление (сохраняют) метод и, если подходящий для того агрегата, Удаление (удаляют) метод. Это также имело бы любые другие пользовательские методы, которые применяются включая запросы (GetActive), и возможно некоторые из тех запросов могли принять спецификации.

Это походит на большое усилие, но кроме пользовательских запросов большая часть кода, по крайней мере, при использовании современного ORM, очень простого реализовать так, я использую наследование (ReadWriteRepositoryBase, где T: IAggregateRoot) и/или состав (обращающийся к классу RepositoryHelper). Базовый класс мог бы иметь методы, которые применяются во всех случаях, таких как GetById.

Надеюсь, это поможет.

3
ответ дан 4 December 2019 в 02:27
поделиться

Я работаю в PHP, но у меня есть что-то набор подобного для моего уровня доступа к данным. Я реализовал интерфейс, который выглядит примерно так:

interface DataAccessObject
{
public static function get(array $filters = array(), array $order = array(), array $limit = array());
public function insert();
public function update();   
public function delete();
}

И затем каждый мой доступ к данным возражает работе что-то вроде этого:

class DataAccessObject implements DataAccessObject
{
    public function __construct($dao_id = null) // So you can construct an empty object
    {
        // Some Code that get the values from the database and assigns them as properties
    }
    public static function get(array $filters = array(), array $order = array(), array $limit = array()) {};  // Code to implement function
    public function insert() {};  // Code to implement function
    public function update() {};  // Code to implement function 
    public function delete() {};  // Code to implement function        
}

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

Однако можно также использовать метаданные SQL (предполагающий, что у Вас есть довольно звуковое проектирование баз данных, которое использует в своих интересах ограничения внешнего ключа и т.п.) генерировать эти объекты доступа к данным. Затем в теории, Вы могли использовать родителя-одиночку класс DataAccessObject, чтобы создать свойства и методы класса и даже построить отношения к другим таблицам в базе данных автоматически. Это более или менее выполнило бы то же самое, которое Вы описываете, потому что затем Вы могли расширить класс DataAccessObject для обеспечения пользовательских методов и свойств для ситуаций, которые требуют некоторого объема вручную созданного кода.

Как заметка на полях для разработки.NET, Вы посмотрели на платформу, которая обрабатывает глубинную структуру уровня доступа к данным для Вас, такой как Дозвуковую? В противном случае я рекомендовал бы изучить просто такую платформу: http://subsonicproject.com/.

Или для разработки PHP, платформа, такая как Платформа Зенда обеспечила бы схожую функциональность: http://framework.zend.com

2
ответ дан 4 December 2019 в 02:27
поделиться

Я также использую шаблон репозитория для своего ДАО, и я довольно доволен им. Да Вы заканчиваете с довольно многими маленькими классами, но это очень удобно в сопровождении. Немного более мощно, если Вы используете IQueriable интерфейс (LINQ). Вы могли также использовать дженерики (Что-то как T GetById<T>(int id)) если у Вас есть довольно последовательная структура базы данных.

1
ответ дан 4 December 2019 в 02:27
поделиться

Основное отступает к второму подходу, находится в поблочном тестировании - дразнящий большие методы фабрики как Ваш SimpleObjectRepository, требует большего количества работы, чем насмешка просто ICustomerDao. Но, мой проект идет со вторым подходом для очень связанных объектов (где большинство будет использоваться в любых модульных тестах), потому что он освещает умственную загрузку и делает это более удобным в сопровождении.

Я выяснил бы то, что делает Вашу систему более удобной в сопровождении и легкой понять и сделать это.

0
ответ дан 4 December 2019 в 02:27
поделиться

George I знает точно, как Вы чувствуете. Архитектура Billy имеет смысл мне, но потребность создать контейнер, Imapper и файлы картопостроителя является болезненной. Затем, если Вы используете NHibernate corrosponding .hbm файл и обычно несколько сценариев модульного теста для проверки работы everythings.

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

public class BaseDAO<T> : IDAO<T> 
{
     public T Save(T entity)
     { 
       //etc......
     }
}
public class YourDAO : BaseDAO<YourEntity>
{
}

Я предполагаю, что без NHibernate Вы использовали бы отражение или некоторый другой механизм для определения что SQL/SPROC звонить?

Eitherway, моя мысль об этом была бы то, где ДАО только должен выполнить основные операции CRUD, определенные в базовом классе затем не должно быть никакой потребности записать пользовательские картопостроители и интерфейсы. Единственным путем я могу думать о achiving, это должно использовать Отражение. Испустите для динамичного создания ДАО на лету.

2
ответ дан 4 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

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