"Занадто об'єктно-орієнтований"


21

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

TDD також тут не дуже практикується, але я хочу мати перевіряється код. Поховання ділової логіки в статичних приватних методах у великих «богоутвореннях» (що, здається, є нормою для цієї команди), не дуже доцільно.

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

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


17
Яка ваша роль? Грунт-розробник? Ти накрутився - отримай кращу роботу. Провідний розробник? Можливо, ви зможете щось змінити ...
Меттью Флінн

2
Не стільки заборгованість за техніку, скільки справу з поганим дизайном та людьми, які не зміниться
ozz

1
Мені відомо про технічні та ділові аргументи, я запитую, як найкраще донести ці знання до своїх колег, які, здається, не забувають про це. Вони бачать багато занять, я бачу перевіряючу розширювану систему
ThuneGrill

5
Вибачте, ви повинні піти. Ви розмовляєте над головами колег. Це не зміниться, поки проект не стане неможливим. Якщо вам не подобається ручне тестування та марші смерті, краще вирушайте кудись інше.
кевін клайн

4
Не бачачи коду, про який йде мова (так, важко надати достатньо хороший зразок, тому нам просто потрібно довіритися вашому судженням), важко сказати, чи дійсно не вистачає OO, чи ви підштовхуєте переобладнаний культовий культ OO відведення без поважних причин. Я думаю, що всі бачили приклади
переобладнаної

Відповіді:


32

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

Люди можуть постійно писати модульний, ефективний, добре абстрагований, відносно безкоштовний код у процедурному стилі. Java - це незвичайний вибір мови для такого магазину, але я можу бачити, що це відбувається, якщо зовнішні фактори вирішили цю мову, як, наприклад, потребувати розробки для Android.

Всі - геній. Але якщо судити рибу за її здатністю лізти на дерево, вона проживе все життя, вважаючи, що вона дурна. - Альберт Ейнштейн

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

З іншого боку, якщо код є безладом в будь-якій парадигмі, ви, ймовірно, повинні просто скоротити свої втрати.


3
це процедурно і безладно. Але я говорю про новий код, який я пишу, як його називають "занадто об'єктно орієнтованим"
ThuneGrill

5
безладний процедурний код, який поширюється кодом OO, не може бути покращенням, просто додаючи плутанину.
wirrbel

7
@ThuneGrill, Ви припускаєте, що вони обрали свій стиль кодування через незнання об'єктно-орієнтованого дизайну, що якби ви могли просто навчити їх, вони побачили б світло. Якщо хтось із прибутковою програмною компанією з сильно об'єктно орієнтованою мовою до цього часу не вивчав переваги OOD, "новий хлопець" не зможе переконати його. Візьміть моє слово для цього і слово інших коментаторів. Якщо ви не можете або не налаштуєте свій стиль, щоб полегшити команду читання, вам слід зменшити свої втрати.
Карл Білефельдт

3
@ThuneGrill: Право Карла. Дотримуйтесь прагматичних причин, а не релігійних. OOP - це, безумовно, хороша ідея, але я бачив, що вона доводиться до смішних крайнощів. У результаті виходять гори з молі. Те, що можна зробити в 1000 рядках коду, в кінцевому підсумку становить 10 000 рядків коду. Тоді, Gee, це важко підтримувати, а продуктивність гасить. (Незалежно від того, до яких класів колекції звикнути.)
Майк Данлаве

1
Я б не обов'язково відмовлявся від думки, що ви можете переконати людей у ​​цьому. Це важко, але це можна зробити - я це зробив. Оскільки це питання видається закритим, дивіться на робочому
місці.stackexchange.com/

7

Читаючи ваше запитання, я згадав одну пораду книги «Прагматичний програміст».

Однією з його порад є Be a Catalyst for Change:

Ви можете опинитися в ситуації, коли ви точно знаєте, що потрібно робити і як це зробити. Вся система просто постає перед вашими очима - ви знаєте, що це правильно. Але попросіть дозволу вирішити всю справу, і вас зустрінуть із затримками та порожніми поглядами. Люди формуватимуть комітети, бюджети потребуватимуть схвалення, і все ускладнюватиметься. Кожен охоронятиме власні ресурси. Іноді це називається "втомою при запуску".

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

Отже, я думаю, якщо ви почнете робити добру справу зі своїми знаннями про OO та TDD, незабаром вони почнуть шукати і питати про вашу роботу.


Намагається бути, але убер-архітектор (який не кодує) нічого цього не матиме.
ThuneGrill

Як тільки він помітить переваги TDD та кращий OO (надійність, продуктивність, ...), ви отримаєте вашу увагу!
Родріго

3

Щоб продати нові способи роботи, потрібно показати очевидні переваги. Писати більше шарів абстракції, без чіткої вигоди, але невиразного: "це може бути корисним для майбутнього" не вийде.

Зробіть фабрики, де фабрики виготовляють більше одного типу об’єктів. Використовуйте ін'єкційну залежність, де вона негайно показує переваги. Зробіть інтерфейси, які насправді будуть реалізовані більш ніж одним класом.

Те, що я занадто часто бачу в «справжньому ОО», - це те, що передові методи використовуються для вирішення дійсно простих проблем надмірно складним чином.

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

Війни виграються по одній битві за один раз.


1

Ви можете переконати їх, лише скориставшись невеликим шматочком коду та впровадивши TDD та покращивши практику ОО на ньому, щоб усвідомити переваги. Ви привели їх до обіцяної землі, а не просто показували приємні листівки її.

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


1
Щойно зробив, ось що викликало всю дискусію. Я лише представив 3-4 абстракції на вершині існуючої функціональності
ThuneGrill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.