Навчитися проектувати архітектуру програми - stack overflow російською

Став помічати, що в міру освоєння C #, я все більше думаю про те, як архітектурно реалізувати ту чи іншу частину програми.

Наприклад, розробляючи додаток для взаємодії з USB-пристроєм, задумався над тим, а як саме будуть взаємодіяти його компоненти.

Наприклад, можна реалізувати єдиний клас, який буде займатися всім: працювати на рівні WinAPI з USB, очікувати приходу пакетів, розуміти протокол спілкування, реалізовувати послідовності команд і обробку відповідей на них і т.д.

Але це незручне рішення. Краще розділити по верствам і, наприклад, винести спілкування по USB в окремий модуль і тоді, якщо USB зміниться на Ethernet, то можна буде просто написати новий модуль, не чіпаючи решту.

Окей, пишемо модуль спілкування по USB. Для цього пишемо спочатку інтерфейс взаємодії з верхнім рівнем. Написали. Так, щось тут все заточене під синхронний обмін, а раптом знадобиться асинхронний. Доповнюємо. І ще кілька параметрів.

Починаємо писати сам модуль. Виявляється, закладена функціональність надлишкова. А ще ось тут щось не так і там і т.д. Знову починаємо думати, виправляти / доповнювати.

У підсумку я зариваються в питання з серії "а як краще зробити зараз, щоб в майбутньому було зручно підтримувати?", Продуктивність падає, а складність придуманих конструкцій різко зростає і в результаті виходить якась каша, а не ідеальний код, який я і хотів отримати.

Що я роблю не так? Як надходять досвідчені програмісти? Як вони уникають цих нескінченних питань і при цьому пишуть цілком підтримуваний і зрозумілий код?

Яку літературу можна почитати, щоб прокачати в цих питаннях? Шаблони проектування? А чи не занадто вони заточені під великі проекти і складні для невеликих проектів?

І чи є у кого посилання на проекти на C #, де можна подивитися архітектурні рішення?

заданий 25 Березня '14 о 17:57

Закритий унаслідок того, що необхідно переформулювати питання так, щоб можна було дати об'єктивно вірну відповідь учасниками Oceinic. Regent. Peter Olson. xaja. Aries 15 Жовтня '15 в 10:29.

Питання породжує нескінченні дебати та дискусії, засновані не на знаннях, а на думках. Для отримання відповіді перефразируйте ваше запитання так, щоб на нього можна було дати однозначно правильну відповідь, або видаліть питання зовсім. Якщо питання можна переформулювати згідно з правилами, викладеними в довідці. внесіть необхідні зміни.

Схожі статті