В хорошо разработанном подходе MVC файл JSP не должен содержать строку Java-кода, и класс сервлета не должен содержать строку JDBC-кода.
Предполагая, что вы хотите показать список в веб-магазине должен быть создан следующий код.
Product
, представляющий объект реального мира продукта, должен быть просто Javabean , public class Product {
private Long id;
private String name;
private String description;
private BigDecimal price;
// Add/generate getters/setters/c'tors/equals/hashcode boilerplate.
}
List
. public class ProductDAO {
private DataSource dataSource;
public ProductDAO(DataSource dataSource) {
this.dataSource = dataSource;
}
public List list() throws SQLException {
List products = new ArrayList();
try (
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT id, name, description, price FROM product");
ResultSet resultSet = statement.executeQuery();
) {
while (resultSet.next()) {
Product product = new Product();
product.setId(resultSet.getLong("id"));
product.setName(resultSet.getString("name"));
product.setDescription(resultSet.getString("description"));
product.setPrice(resultSet.getBigDecimal("price"));
products.add(product);
}
}
return products;
}
}
@WebServlet("/products")
public class ProductsServlet extends HttpServlet {
@Resource(name="jdbc/YourDB") // For Tomcat, define as in context.xml and declare as in web.xml.
private DataSource dataSource;
private ProductDAO productDAO;
@Override
public void init() {
productDAO = new ProductDAO(dataSource);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
List products = productDAO.list();
request.setAttribute("products", products); // Will be available as ${products} in JSP
request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
} catch (SQLException e) {
throw new ServletException("Cannot obtain products from DB", e);
}
}
}
/WEB-INF/products.jsp
, который использует JSTL
для итерации по List
, который доступен в EL на ${products}
и использует JSTL
, чтобы избежать свойств строки, чтобы избежать отверстий XSS , когда речь идет о входном сигнале, управляемом пользователем. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/format" prefix="fmt" %>
...
${product.id}
Чтобы заставить его работать, просто вызовите сервлет по его URL-адресу. При условии, что сервлет аннотируется @WebServlet("/products")
или отображается в web.xml
с помощью
, вы можете называть его http://example.com/contextname/products
Я думаю, это займет время, пока инструменты не станут более усовершенствованными, больше людей приобретает опыт с MDD. В данный момент, если Вы хотите вытащить что-то из MDD, необходимо вложить капитал довольно много, таким образом, его использование остается ограниченным.
Рассмотрение openArchitectureWare, например: В то время как это довольно устойчиво, и основная документация существует, документация относительно внутренних работ отсутствуют и существуют все еще проблемы с масштабируемостью, которые не документированы - возможно, который поправится, когда Xtext и Xpand будут переписаны.
Но презирайте те ограничения, само поколение довольно легко с oAW, можно переместиться моделям как очарование в Xtend и Xpand и путем объединения нескольких рабочих процессов в большие рабочие процессы, можно также сделать очень сложные вещи. В случае необходимости можно обратиться к Java, таким образом, у Вас есть очень большая гибкость в том, что можно сделать с моделями. Записи Вашего собственного DSL с Xtext в oAW также быстро делаются, все же Вы получаете свою метамодель, синтаксический анализатор и очень хорошего редактора в основном бесплатно. Также можно получить модели в основном отовсюду, например, компонент, который может преобразовать базу данных в метамодель, и соответствующие модели могут быть записаны без большого усилия.
Таким образом, я сказал бы, MDD все еще растет как инструменты и опыт с ним увеличения. Это уже может используемый успешно, если Вы имеете необходимые экспертные знания и готовы продвинуть их в своей компании. В конце я думаю, это - очень хорошая вещь, потому что много кода связующего звена (иначе вставка копии) может и должно быть сгенерировано. Выполнение этого с MDD является очень хорошим и структурированным способом сделать это, которое упрощает возможность многократного использования, по-моему.
Образцовая Управляемая разработка была вокруг в течение очень долгого времени.
Большей частью succesfull ранних попыток был James Martins Интегрированное Инженерное средство", которое является все еще вокруг и продано CA под серьезно некрутой торговой маркой "Coolgen".
Итак, почему это не приняло мир, если это было настолько хорошо?
Хорошо эти инструменты способны делать простой материал более простым, но, они не делают сложные вещи немного легче, и во многих случаях делают сложные вещи тяжелее!
Можно провести часы, пытаясь убедить диаграмму 4GL язык моделирования "сделать правильную вещь", когда Вы знаете, что кодирование правильной вещи в Java/C/SQL или независимо от того, что было бы тривиально.
Одна из проблем MDD - то, что, так как он работает на более высоком уровне абстракции, он требует разработчиков, которые могут подняться на уровне абстракции также. Это значительно уменьшает вселенную разработчиков, которые могут понять и использовать такие методологии.
Я думаю, возможно, нет категорического ответа - следовательно отсутствие "интереса" к этому вопросу.
Но у меня лично был смешанный опыт с MDA. Единственное время это был хороший опыт, было с большими инструментами - я раньше использовал TogetherSoft (я полагаю, что они так или иначе закончили в Borland) - они были одним из первых для представления редактирования, которое не было "генерацией кода", но на самом деле редактированием кода/модели непосредственно (таким образом, Вы могли отредактировать код или модель, это была вся одна вещь). У них также был рефакторинг (который был первым разом, когда я помню, что он отправляет smalltalk среды).
С этого времени я не видел, что MDA больше растет в популярности, по крайней мере, в господствующей тенденции, таким образом, с точки зрения популярности это, кажется, не будущее (так, чтобы вид ответов это).
Конечно, популярность не все и вещи иметь тенденцию возвратиться, но в настоящее время я думаю, что MDA+tools просматривается многими как "основанная на мастере генерация кода" инструменты (независимо от того, что это действительно), таким образом, я думаю, что будет проходить некоторое время или возможно никогда, что это действительно взлетает.
Отказ от ответственности: Я - разработчик бизнес-приложений. Следующее представление, конечно, формируется моими событиями в канавках предприятия IT. Я знаю, что существуют другие домены разработки программного обеспечения. Особенно в разработке промышленных и/или встроенных систем мир мог бы выглядеть по-другому.
Я думаю, что MDSD все еще очень связывается с генерацией кода.
Генерация кода только полезна, когда Ваш код содержит много шума и/или является очень повторяющимся. Другими словами, когда Ваш код не может главным образом сфокусироваться на существенной сложности, но загрязнен случайной сложностью.
По-моему, тенденция в текущих платформах и платформах состоит в том, чтобы точно удалить случайную сложность и разрешение вниманию кода приложения на существенную сложность.
Таким образом, эти новые платформы/платформы вынимают много ветра из парусов перемещения MDSD.
DSLs (текстовые) являются другой тенденцией, которая пытается включить единственное внимание на существенную сложность. В то время как DSLs может использоваться в качестве источника для генерации кода, они, прежде всего, не связываются с генерацией кода. DSLs (особенно внутренний DSLs) в основном позволяют ему открыться, чтобы быть интерпретированным/выполненным во времени выполнения. [генерация кода во время выполнения где-нибудь промежуточная].
Таким образом, даже если DSLs часто упоминаются вместе с MDSD, я думаю, что они - действительно альтернатива MDSD. И, учитывая текущую шумиху, они также вынимают импульс из перемещения MDSD.
Если Вы достигли цели окончательного удаления случайной сложности из Вашего кода (я знаю, что это является фиктивным), то Вы прибыли в текстовую модель своей бизнес-проблемы. Это не может быть далее упрощено!
Хорошие поля и схемы не предлагают другое упрощение или повышение уровня абстракции! Они могут быть хороши для визуализации, но даже который сомнителен. Изображение является не всегда лучшим представлением для схватывания сложности!
Далее больше текущее состояние инструментов, привлеченных в MDSD, добавляет, другой уровень случайной сложности (думайте: синхронизация, diffing/merging, осуществляя рефакторинг...), который в основном аннулирует конечную цель упрощения!
Посмотрите на следующую модель ActiveRecord как иллюстрация моей теории:
class Firm < ActiveRecord::Base
has_many :clients
has_one :account
belongs_to :conglomorate
end
Я не думаю, что это может больше упрощаться. Также любое графическое представление с полями и строками не было бы никаким упрощением и не будет больше предлагать удобства (думайте о layouting, рефакторинге, поиске, diffing...).
Сообщите мне, если у Вас есть кто-либо (хороший или плохой) опыт с управляемыми моделью подходами или почему Вы думаете, что это не интересно вообще.
Я думаю, что участники здесь являются частью "Никакой Серебряной пули" лагерь (я определенно). Если бы MDA работал (равняется "огромным сбережениям"), мы знали бы это, который является наверняка. Вопрос: как далеко "meta" можно пойти при сохранении системы управляемой? Это было поворотным моментом в UML 2.0, когда они представили более формальную метаметамодель. До сих пор я не видел использование реального мира modelisation питания UML 2.0 (но мой мир скорее ограничен). Кроме того, у Вас есть только два варианта с управляемым моделью подходом: сгенерируйте код или наличие времени выполнения, использующего Вашу модель. Окончательный генератор кода без ограничений называют "человеческим", тогда как окончательное время выполнения, где найдено в 4GLs (каково текущее число в наше время?). Возможно, это объяснило бы отсутствие enthousiasm.
Мы, в itemis (www.itemis.com) используем управляемую моделью Разработку программного обеспечения много. До сих пор у нас были действительно хорошие события. Shure это не серебряная пуля, но это помогает улучшающемуся качеству программного обеспечения следовательно больше использования для наших клиентов.
Образцовая Управляемая Разработка будет будущим, если и только если модели, которые это использует, могут быть столь же гибкими как написание кода, который это, как предполагается, генерирует. Я думаю причина, почему она не так успевает, прямо сейчас то, что Вы, трудно сделать то же "круглое смещение", которое основанные на тексте языки программирования делали в течение многих десятилетий.
С основанными на тексте языками программирования, изменяя модель так же просто как изменяющий несколько строк кода. С графическим языком программирования (иначе MDD-схема как UML), необходимо найти, что способ перевести ту модель полностью отступает к ее основанному на тексте эквиваленту (который был уже выразительно эффективен во-первых), и это может быть очень, очень грязно.
По моему скромному мнению, единственный способ, которым MDD может когда-либо быть полезным, если он создается с нуля, чтобы быть столь же выразительным и гибким как его основанный на тексте дубликат. Попытка использовать существующие нисходящие языки графического дизайна (такие как UML) для инструментов, которые по сути создаются с самого начала с помощью разделенных на уровни абстракций (таких как языки программирования) излагает огромное несоответствие импеданса. Я не могу вполне указать на него, но существует все еще что-то отсутствующее в MDD, который сделал бы его столь полезным, как люди будут утверждать этого быть...
Это очень запоздалый ответ, но в настоящее время я ищу инструменты MDD для замены Rose RT, которые, к сожалению, заменяются Rhapsody. Мы находимся в реальном времени, встраиваемом и распределенном пространстве C ++, и мы получаем МНОГО от MDD. Мы пытаемся перейти к более совершенному инструменту и более широко использовать его в нашей очень большой компании. Это тяжелая битва из-за некоторых прекрасных причин, упомянутых здесь.
Я думаю, что MDD находится всего на один уровень выше компилятора, так же как компилятор находится выше сборки. Мне нужен инструмент, который позволяет мне, как архитектору, разрабатывать структуру приложения и широко редактировать генерацию кода (скрипты) для использования этой структуры и любого промежуточного программного обеспечения, которое мы используем для передачи сообщений. Я хочу, чтобы разработчики создавали полные классы UML и диаграммы состояний, которые включают весь код, необходимый для создания приложения и / или библиотеки.
Это правда, что с кодом можно делать все, что угодно, но я бы грубо резюмировал преимущества MDD как это:
Даже когда я набираю это, я понимаю, что вы можете делать все в коде. Мне нравится тонкий инструмент, который устанавливается поверх кода для обеспечения единообразия, документирования дизайна и упрощения рефакторинга.
Основная проблема, с которой я сталкиваюсь, на которую у меня нет хорошего ответа, заключается в том, что не существует стандарта набор функций и формат файлов для таких моделей. Люди беспокоятся о том, что продавец уйдет, а затем застрянет. (В основном это случилось с Rose RT.) У вас этого нет с исходным кодом. Однако, у вас будет последняя версия инструмента и код курса, который вы создали последним :). Я готов поспорить, что выгода перевешивает риск.
Мне еще предстоит найти подобный инструмент, но я пытаюсь убедить нескольких поставщиков выслушать меня и, возможно, принять деньги, чтобы это произошло.