День двести сорок третий. #BestPractices
Разработка для Расширяемости
Одним из важных аспектов проектирования приложения является тщательное планирование его расширяемости. Для этого необходимо понимать затраты и выгоды, связанные с различными механизмами расширяемости.
Есть много способов обеспечить расширяемость приложения. Они варьируются от менее мощных, но менее дорогих до очень мощных, но дорогих. Для любого заданного требования расширяемости вы должны выбирать наименее дорогостоящий механизм, соответствующий требованиям.
Незапечатанные классы
Запечатанные (sealed) классы не могут быть унаследованы, и они препятствуют расширяемости. Напротив, классы, которые могут быть унаследованы, называются незапечатанными классами.
⚠️ РАССМОТРИТЕ использование открытых классов без добавления виртуальных или защищенных членов в качестве способа обеспечить недорогую, но очень ценную расширяемость.
Разработчики часто хотят наследовать от незапечатанных классов, чтобы добавить вспомогательные элементы, такие как пользовательские конструкторы, новые методы или перегрузки методов. Например,
Классы по умолчанию незапечатаны в большинстве языков программирования, и это также рекомендованное поведение по умолчанию для большинства классов. Расширяемость, предоставляемая незапечатанными типами, высоко ценится пользователями фреймворков и довольно недорогая для обеспечения из-за относительно низких затрат на тестирование, связанных с незапечатанными типами.
Продолжение следует...
Источник: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/
Разработка для Расширяемости
Одним из важных аспектов проектирования приложения является тщательное планирование его расширяемости. Для этого необходимо понимать затраты и выгоды, связанные с различными механизмами расширяемости.
Есть много способов обеспечить расширяемость приложения. Они варьируются от менее мощных, но менее дорогих до очень мощных, но дорогих. Для любого заданного требования расширяемости вы должны выбирать наименее дорогостоящий механизм, соответствующий требованиям.
Незапечатанные классы
Запечатанные (sealed) классы не могут быть унаследованы, и они препятствуют расширяемости. Напротив, классы, которые могут быть унаследованы, называются незапечатанными классами.
⚠️ РАССМОТРИТЕ использование открытых классов без добавления виртуальных или защищенных членов в качестве способа обеспечить недорогую, но очень ценную расширяемость.
Разработчики часто хотят наследовать от незапечатанных классов, чтобы добавить вспомогательные элементы, такие как пользовательские конструкторы, новые методы или перегрузки методов. Например,
System.Messaging.MessageQueue
является незапечатанным и, таким образом, позволяет пользователям создавать настраиваемые очереди по умолчанию для определённого пути очереди или добавлять настраиваемые методы, которые упрощают API для конкретных сценариев.Классы по умолчанию незапечатаны в большинстве языков программирования, и это также рекомендованное поведение по умолчанию для большинства классов. Расширяемость, предоставляемая незапечатанными типами, высоко ценится пользователями фреймворков и довольно недорогая для обеспечения из-за относительно низких затрат на тестирование, связанных с незапечатанными типами.
Продолжение следует...
Источник: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/