Найдите OR Mapper, который вам нравится, и не уделяйте больше внимания слою данных. Это в основном решаемая проблема, и большую часть внимания, которое вы уделите этому, будет заново изобретать колесо. Очень люди пишут приложения, чьи потребности в CRUD настолько уникальны, что в настоящее время они избегают использования ORM.
Некоторые из тех же советов для пользовательского интерфейса - найдите инструменты и структуры, вместо того, чтобы тратить слишком много времени на все это, там много хорошего развития.
Итак, сконцентрируйтесь на сервисном уровне, где действительно выражена уникальность вашего приложения. Но мы не можем действительно проверить или критиковать ваш уровень обслуживания, потому что мы ничего не знаем о проблеме, которую вы пытаетесь решить. Все, что вы перечислили, безусловно, является хорошим подходом для определенных задач, определенных наборов компромиссов и т. Д. Не зная больше о том, что имеет значение (производительность / время разработки / конфигурируемость / надежность / ясность), никто не может сказать вам, что правильный набор вариантов выбора.
На вашем элементе «output» - другие устройства могут поддерживать связь с вашим приложением, если все сериализуется до общего формата, обычно XML. Затем вы просто отправляете его по проводу и повторно увлажняете на другом конце.
Разработка программного обеспечения, когда она нетривиальна, является Злой проблемой . Вполне вероятно, что много советов, которые вы получите, нужно будет выбросить на полпути через ваш проект. Я вообще не верю в великие архитектуры - сосредоточьтесь на решении конкретных проблем так хорошо, как только можете, и если вам повезет, появится шаблон, которым вы сможете воспользоваться. Все остальное, как правило, гордыня.