Вопрос о том, следует ли делиться своими сборками Service / API с клиентскими приложениями, довольно субъективен. Если вы являетесь полноценным магазином Microsoft и используете .NET для всего своего стека приложений, то я бы сказал, что совместное использование API - отличный способ получить повторное использование кода (вы должны быть осторожны при разработке своего API, чтобы не истекать кровью. проблемы домена, такие как репозитории, в вашу презентацию.) Если у вас нет никаких планов по переносу ваших клиентских приложений на другие платформы (то есть вы планируете оставаться на .NET в обозримом будущем), то я думаю, что это вполне приемлемо, чтобы поделиться ваши сборки Service / API (и даже в этом случае в многоплатформенной клиентской среде совместное использование Service / API с .NET-клиентами должно быть приемлемым). Всегда существует компромисс между «архитектурно идеальным» и «практичным и достижимым» в пределах бюджета'. Вы можете потратить МНОГО времени, денег и усилий, пытаясь достичь архитектурного идеала, когда разрыв между этим и практическим часто не так уж велик. Выбор НЕ совместно использовать API и, по сути, воссоздать его для поддержки «правильной» SOA, использующей только контракт, может фактически увеличить объем работы и вызвать проблемы с обслуживанием, которые, вполне возможно, не стоят того для вашего конкретного проекта в данный конкретный момент. Учитывая, что вы уже в целом «ориентированы на услуги», если в будущем вам понадобится выгода, которую может предложить клиентское потребление только по контракту, тогда вы уже готовы к этому. Но не заходите слишком рано.
Учитывая ваши потребности, исходя из того, что я смог почерпнуть из этих сообщений, я думаю, что вы тоже на правильном пути, начиная с ваших услуг. Репозиторий (a la Evans, DDD) определенно является предметной областью, и поэтому вам действительно не следует беспокоиться об этом с точки зрения вашего уровня представления. Ваши услуги - это шлюз к вашему домену, который является домом для вашей бизнес-логики. Репозитории - это просто средство поддержки, которое помогает вам добиться изоляции домена от хранилища данных (на самом деле это прославленные коллекции, и, честно говоря ... они могут быть немного неудобными в динамическом и сложном домене. Простые сопоставители данных, (Fowler, PofEAA) часто намного проще в обращении и менее сложны в долгосрочной перспективе, и позволяют централизовать более адаптируемое поведение вокруг вашей логики извлечения данных в ваших доменных службах.) Помимо интенсивного использования вызовов AJAX к службам REST. , если вы предоставляете соответствующие службы / API для своего домена, это единственное, о чем вашим клиентам следует беспокоиться. Оберните всю остальную бизнес-логику полностью в рамках вашего домена и сделайте своих клиентов максимально легкими и абстрагированными от таких понятий, как «Репозиторий» или «Картограф данных» и так далее.
По моему опыту, единственная концепция, не относящаяся к сервису или API, которая должна быть разделена через границу между клиентом и доменом, - это контекст ... и пересечение этой границы в сервисно-ориентированном приложении может быть заведомо трудным.
person
jrista
schedule
26.05.2009