2013-07-10 6 views
3

Я создаю небольшое веб-приложение Java с использованием Spring MVC, Hibernate, и я запутался в названии методов классов DAO.Методы определения класса DAO

Например, у меня есть класс InvoiceDAO.java, который я думал, что должен содержать следующие методы:

Save(Invoice newInvoice); 
Void(Invoice oldInvoice); 
getInvoiceByID(Long invoideID); 

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

add(Invoice newInvoice); 
update(Invoice oldInvoice); 

, который не имеет для меня никакого смысла, поскольку я не уверен, как я могу назвать аннулирование счета как Обновление? !!

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

благодаря

+1

Обновить = изменить данные существующего объекта. даже без данных. И, пожалуйста, соблюдайте соглашения об именах Java: http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367 –

+0

См. Эту статью о соглашениях об именах: http://java.about.com /od/javasyntax/a/nameconventions.htm –

+4

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

ответ

7

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

Уровень данных должен содержать чистые методы типа CRUD, то есть добавить/сохранить/найти.

Использование многих современных инфраструктур данных, вам даже не нужно писать слой данных ... например. см. http://blog.springsource.org/2011/02/10/getting-started-with-spring-data-jpa/

+0

+1 re Spring Data JPA. Это очень полезно, и вы можете обойти всю дискуссию о лучших именах для операций CRUD. –

+0

@dan Итак, вы говорите, что в слое DAO я буду поддерживать только методы CRUD (Save, Update, Delete, Search), тогда как в Service layer я добавлю, например, всю бизнес-логику (аннулирование счета-фактуры, добавление новых элементов в инвентарь ... и т. д.), затем вызовите методы DAO из уровня Service для выполнения задач бизнес-логики ... правильно? – MChan

+1

@MChan точно. Разделение проблем. Сохранение всего кода взаимодействия с базами данных из бизнес-логики упрощает отслеживание и поддержку бизнес-логики. –

0

Сохраните и добавьте 2 разных значения. Как и Void и обновление. Используйте термин, который точно описывает, что делает этот метод. Я не знаю никакой конкретной лучшей практики здесь.

Кроме того, я бы склонен передавать идентификатор только в метод void, если этого достаточно для выполнения действия. Это другой сценарий из обновления, где вы можете ожидать обновления нескольких атрибутов в счете-фактуре.

7

Я нашел refeernce некоторое время назад о DAO наименовании ...

Названия в соответствии с функцией

getData* данных Методы синтаксического анализа используются внутри DAO, не использовать это пространство имен для данных доступ ,

get* (например, getUsersByID) SELECT-запросы - рекомендуется, чтобы вы пытались использовать существительное в Singular или Plural в соответствии с возвратом одной или нескольких строк.

set* (например SetActive) UPDATE Запросы

add* (например AddUser) ВСТАВИТЬ запросов - Это рекомендуется, что вы пытаетесь использовать существительное в единственном или множественном числе в соответствии с одним или несколькими рядами вставки.

delete* (например deleteUser) DELETE запросы

is* (например IsActive) IF проверка возвращает логическое значение, то есть, если ($ user_dao-> isUserActive ($ ID)) или если ($ post_dao-> isPostInStorage ($ ID))

count* (например,countUsers) Возвращает целое число с количеством элементов.

Зарезервированные функции

insert - принимает объект в качестве аргумента, и вставляет его в таблицу.

save - принимает объект в качестве аргумента, и сохраняет в нем данные обратно бакэнду данных

poke - принимает идентификатор в качестве аргумента, «протыкает» звукозаписывающие (наборы «последний раз видели» или что-то в настоящее) возвращает количество обновлений (обычно 1)

Другие вещи, чтобы помнить

в качестве хранилища Backend может или не может быть «база данных», то будет предложено не создавать методы с именами, которые подразумевают, что бэкэнд - это usin g база данных.

+0

В вашем случае 'setVoid' будет тем, что вам нужно –

+1

Я не думаю, что аннулирование счета-фактуры должно быть ответственным за dao –

3

Прежде всего, на Java, по крайней мере, вы называете свои методы первой буквой каждого внутреннего слова, заглавного, верблюжьего случая. Вы можете увидеть в разделе Методы это: Java Naming Conventions

Что касается конкретного наименования ваших методов внутри дао: я пошел бы путем создания основных операций Crud, которые могут быть выполнены в ваших классах модели Пример:

add(Invoice invoice) 
update(Invoice invoice) 
// or instead 
save(Invoice invoice) // which will perform either add or update 
delete(Invoice invoice) // or delete(int invoiceId) 
findById(int invoiceId) 
// and so forth 

Я не использовал бы термин «пустота» внутри dao, поскольку это связано с бизнесом. Сделайте dao настолько простым, насколько это возможно, и после этого в вашей службе, которая будет использовать dao, вы можете назвать свои методы, связанные с требуемым бизнесом (например, голос (счет-фактура))

Существует еще одна возможность создать общий дао с основными операциями CRUD и, возможно, вы можете начать называть методы, как вы хотите:

public class InvoiceDAO inherits GenericDao<Invoice> { 
    // all the above methods would be inherited 
    // add specific methods to your dao 
} 

Опять же, если бы я тебя, я бы переместить именование конкретных вещей в службе. Теперь вам решать, как вы хотите приблизиться к тому, что я показал. Идея состоит в том, чтобы оставить dao максимально простым.

Вы могли бы также пойти и назвать свою недействительным метод (так как вы можете сделать имя его недействительным, поскольку в Java является ключевым словом - благодаря @Marco Форберг для заметив, что) либо удалить (Пустота - означает, что он удален.) или performVoid. Или просто введите обновление, если вы не удаляете счет-фактуру из базы данных после ее аннулирования. обновление может быть применено к любым изменениям, внесенным вами для записи вашего счета.

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