Я уверен, что есть некоторая разница между разработкой фреймворка или библиотеки и приложения.
Процессы разработки по сути одинаковы. Различия могут сводиться к вопросам маркетинга и развертывания, хотя я считаю, что самые большие различия обычно связаны с масштабом и определением проекта. Помните, что приложение может включать в себя или использовать платформу или библиотеку, каркас может быть набором библиотек.
У меня есть некоторые сомнения относительно того, как справиться с организацией и управлением этим проектом: существуют ли какие-то общие правила, которым нужно следовать, советы, лучшие практики или что-то, что следует иметь в виду при разработке такого проекта?
Организация и управление проектом снова одинаковы для любого проекта развития. Опять все сводится к сфере. Однако, когда дело доходит до написания фреймворка, стоит иметь очень четкое представление о том, чего вы пытаетесь достичь, и поместить строгие правила проектирования в общедоступный интерфейс к фреймворку, чтобы обеспечить согласованность с точки зрения представления API. Если вы позволите каждому разработчику заниматься своими делами, вы получите сложную путаницу и очень не элегантный дизайн API.
Я поддержу рекомендацию Райана Хейса о прочтении « Руководства по проектированию инфраструктуры», хотя сама книга направлена на разработку сред на основе .NET, потому что общие рекомендации применимы независимо от конкретных технологий реализации, которые вы можете использовать.
Исходя из своего опыта, я бы посоветовал придерживаться классического принципа YAGNI, сначала реализовав самые упрощенные общедоступные интерфейсы, а затем расширяясь, чтобы потом обеспечить больший контроль и глубину, но будьте осторожны, используя полезные имена, чтобы показать, почему расширяются методы или классы. Я никогда не был фанатом добавления «Ex» или других подобных суффиксов к именам методов или добавления чисел в расширенные определения интерфейса. Различайте функциональность, и имена вашего интерфейса / метода должны стать более понятными и, надеюсь, менее запутанными и запутанными.