Необходима трехуровневая архитектура приложения?
-
10-10-2019 - |
Вопрос
Я работал над проектом, который реализует трехуровневую архитектуру со следующим дизайном:
- Презентационный слой - Использует PHP с фреймворком MVC для обработки презентации и бизнес -логики. Этот слой делает вызовы на сервисный уровень, который обращается к данным.
- Уровень доступа к данным - Использует C# .net и разделен на обслуживание, бизнес -логику и уровень данных. Называется презентационным слоем. Вызовы в базе данных и сериализуют ответы, чтобы вернуться на уровень презентации.
- Уровень данных - База данных. Предоставляет все данные для двух вышеуказанных слоев.
Я понимаю, что трехуровневый подход может помочь обеспечить безопасность, поскольку до сих пор нет доступа к данным, если уровень презентации будет скомпрометирован. Хотя это правда, кажется, что этот подход немного переполняет его, тем более что я вынужден написать две модели для одного и того же объекта в первых двух слоях.
Итак, мой вопрос: это плохая реализация трехуровневой архитектуры? Если так, как это можно было бы улучшить? Каковы недостатки, если таковые имеются, просто наличие реализации MVC, которая имеет доступ к базе данных? Какой подход (ы) вы используете для своих веб -приложений?
Спасибо за помощь!
Решение
Мне кажется, что ваши 3 уровня такие же, как и представление, модель контроллера. Если ваш PHP в основном звонит на ваш слой № 2, то я бы подумал, что сам не должен быть MVC, если у вас нет очень сложного уровня презентации, который сам должен быть организован в MVC, например, если у вас сложная навигация или пользователь Логика аутентификации.
Другие советы
Ничего нет необходимый в программировании. Но есть куча практик, которые были продемонстрированы годами как что-то, что вы можете отключить, до-беттер-репутации. Разделение N-это лишь одна из этих практик.
http://en.wikipedia.org/wiki/multitier_architecture
Ваше описание следует по описанию в вики, поэтому - это подходящий способ реализации 3 -уровневого приложения.
Но помните, вам ничего не должно ничего делать - просто следуйте тому, как вам удобно. И в будущем у вас будет свой собственный набор практик, которые работают для вас конкретно.
Я думаю, что ваше осложнение проистекает из того факта, что вы используете PHP и .NET, которые не совместимы. Если вы устранили один из них (только использованный PHP или только .NET), это упростило бы вещи. В противном случае, я думаю, что вы используете хороший подход.
Ценность подхода не только для безопасности, но и облегчает обслуживание.
Я не уверен, что понимаю беспокойство: «Тем более, что я вынужден написать две модели для одного и того же объекта в первых двух слоях». Казалось бы, это потому, что вы используете два разных языка программирования для пользовательского интерфейса и заднего дня. Я предполагаю, что C# «уровень доступа к данным» содержит полную модель объекта, которую вам нужно повторить в вашем переднем конце.
Похоже, что проблема заключается в том, что у вас есть два средних уровня, которые отражают друг друга, потому что вы используете два языка, а не то, что вы используете архитектуру N-уровня