|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Как называете базовые абстрактные классы? пример: public abstract class UserAchievement Base vs public abstract class UserAchievement Или еще какая схема? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2017, 22:41 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Denis., В нашем стайлгайде так: Код: c# 1. 2. 3. 4. 5. 6. 7.
в случае, если абстрактный базовый класс не является контрактом, а всего лишь базовой реализацией. Если необходимо использовать абстрактный класс в качестве контракта, например, существуют методы, принимающие объекты наследников базового класса, или параметризация типом базового класса: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
тогда суффикс Base не используется. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 08:27 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Denis.Как называете базовые абстрактные классы?По настроению. Главное, чтобы название отражало суть. зы: "стайлгайды" детский сад. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 08:41 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Алексей КDenis.Как называете базовые абстрактные классы?По настроению. Главное, чтобы название отражало суть. зы: "стайлгайды" детский сад. Стайлгайды - это договоренность. А вот в детском саду обычно по настроению :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 08:44 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Алексей КПо настроению. Главное, чтобы название отражало суть. Из разряда: — главное, чтобы было хорошо! — каковы критерии «хорошо»? — ээ.... — главное, чтобы отражало суть! — каковы критерии того, что суть отражена? — ээаэаээ... — главное, чтобы код был качественный! — каковы критерии качественного кода? — нуу... По настроению можно копать или не копать. Алексей Кзы: "стайлгайды" детский сад. Детский сад, это «по настроению». Смысла обсуждать и спорить на эту тему нет, потому что по-настроенщики могут быть только одиночки, и к командной разработке таких детишек не допускают. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 09:34 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
skyANAСтайлгайды - это договоренность. А вот в детском саду обычно по настроению :) Да вообще, Алексей удивляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 09:35 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVosttв случае, если абстрактный базовый класс не является контрактом, а всего лишь базовой реализацией. А если и то и то? Как же быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 11:21 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVostt— главное, чтобы отражало суть! — каковы критерии того, что суть отражена? — ээаэаээ...Всем читателям кода понятно из названия, для чего предназначен данный класс. hVostt— главное, чтобы код был качественный! — каковы критерии качественного кода? — нуу... Программа делает то, что написано в техническом задании. Программа легко модифицируется, при необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 11:33 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVosttskyANAСтайлгайды - это договоренность. А вот в детском саду обычно по настроению :) Да вообще, Алексей удивляет.Просто я работаю над долгоживущими проектами, в которых сменилось не одно поколение "стайлгайдов". :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 11:35 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Алексей КhVosttпропущено... Да вообще, Алексей удивляет.Просто я работаю над долгоживущими проектами, в которых сменилось не одно поколение "стайлгайдов". :-) Ну да, были времена, когда не было дженериков. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 11:57 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
ЕвгенийВhVosttв случае, если абстрактный базовый класс не является контрактом, а всего лишь базовой реализацией. А если и то и то? Как же быть? Это плохо. Надо исправить когда время будет. Речь же идёт о нейминге нового класса, следовательно ты знаешь как ты его будешь использовать. Чаще всего контрактом является интерфейс, но иногда интерфейс лишнее звено и следует использовать базовый класс как контракт. Такой нейминг нужен, чтобы было сразу понятно, как используется класс, это снимает много вопросов на взлёте. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 12:02 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Алексей КВсем читателям кода понятно из названия, для чего предназначен данный класс. Т.е. ты даёшь почитать ВСЕМ свой код, чтобы решить, угадал ты с названием или нет? У нас для этого по каждому проекту формируется словарь терминов. Есть также общий словарь для паттернов и архитектурных единиц. У каждой переиспользуемой библиотеки также есть свой словарь. Нет такого, чтобы какой-нибудь Вася назвал класс как ему вздумается только потому, что он решил, что все его правильно поймут. Вот это детский сад. Алексей КПрограмма делает то, что написано в техническом задании. Программа легко модифицируется, при необходимости. Т.е. не важно какой там говнокод, если программа делает то, что написано в тех. задании? Как же ты поймёшь, что программа будет легко модифицироваться при необходимости? Ждать, пока не произойдёт несколько модификаций, чтобы понять, хороший код или плохой? У нас для этого используется оценка обязанностей и ответственности классов, оценка связанности и связности компонентов, количественная оценка зависимостей, объёма кода, количества свойств/методов, оценка по следованию принципам проектирования и разработки. Также учитываются перегибы (слепое и бездумное следование принципам), антипаттерны. Мы можем сказать почему данный код плохой и хороший и объяснить почему на понятном всем языке в общепринятой терминологии. Вообще практикуешь code review? Занимался этим когда-нибудь? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 12:12 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Base есть, Abstract в топку. Код: c# 1. 2. 3. 4. 5. 6.
msAccessRule Aes Array Assembly AsymmetricAlgorithm AsymmetricKeyExchangeDeformatter AsymmetricKeyExchangeFormatter AsymmetricSignatureDeformatter AsymmetricSignatureFormatter Attribute AuditRule AuthorizationRule BaseChannelObjectWithProperties BaseChannelSinkWithProperties BaseChannelWithProperties Binder Calendar CodeAccessPermission CodeAccessSecurityAttribute CodeGroup CollectionBase CommonAcl CommonObjectSecurity Comparer`1 ConstructorInfo ContextBoundObject CriticalFinalizerObject CriticalHandle CriticalHandleMinusOneIsInvalid CriticalHandleZeroOrMinusOneIsInvalid CustomConstantAttribute Decoder DecoderFallback DecoderFallbackBuffer Delegate DeriveBytes DES DictionaryBase DirectoryObjectSecurity DSA EastAsianLunisolarCalendar Encoder EncoderFallback EncoderFallbackBuffer Encoding EncodingProvider Enum EqualityComparer`1 EventInfo EvidenceBase FieldInfo FileSystemInfo FileSystemSecurity FormattableString Formatter GenericAce GenericAcl GenericSecurityDescriptor HashAlgorithm HMAC IdentityReference IsolatedStorage IsolatedStoragePermission IsolatedStoragePermissionAttribute KeyedCollection`2 KeyedHashAlgorithm KnownAce MarshalByRefObject MaskGenerationMethod MD5 MemberInfo MethodBase MethodInfo Module MulticastDelegate NativeObjectSecurity ObjectAccessRule ObjectAuditRule ObjectSecurity ObjectSecurity`1 OrderablePartitioner`1 Partitioner`1 PropertyInfo QualifiedAce RandomNumberGenerator RC2 ReadOnlyCollectionBase RealProxy ReflectionContext Rijndael RIPEMD160 RSA SafeBuffer SafeHandle SafeHandleMinusOneIsInvalid SafeHandleZeroOrMinusOneIsInvalid SecurityAttribute SecurityState SerializationBinder SHA1 SHA256 SHA384 SHA512 Stream StringComparer SymmetricAlgorithm TaskScheduler TextReader TextWriter TimeZone TripleDES Type TypeInfo ValueType WaitHandle ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 12:23 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVostt... в общепринятой терминологии.Ну говорю же - детский сад. Нет никакой "общепринятой терминологии". Есть стандарты имеющие конкретные наименования: ГОСТ, СНИП, ANSI, ISO и т. п. Всё остальное - чьё-то субъективное мнение. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 12:23 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
Алексей КhVostt... в общепринятой терминологии.Ну говорю же - детский сад. Нет никакой "общепринятой терминологии". Есть стандарты имеющие конкретные наименования: ГОСТ, СНИП, ANSI, ISO и т. п. Всё остальное - чьё-то субъективное мнение. :-) ГОСТ нам спустили с неба в виде скрижалей? ISO переведено с найденных манускриптов племени Майя? ANSI это научная аксиома. СНИП от инопланетян. А всё остальное.. ну да, мы поняли Уведите пациента в палату №6 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 13:02 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVostt ГОСТ нам спустили с неба в виде скрижалей? ISO переведено с найденных манускриптов племени Майя? ANSI это научная аксиома. СНИП от инопланетян. Это общепринятые системы рекомендованные/навязанные всем заинтересованным. Сфера их применения выходит далеко за границы отдельно взятой небольшой шаражки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 14:44 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
ЕвгенийВЭто общепринятые системы рекомендованные/навязанные всем заинтересованным. Сфера их применения выходит далеко за границы отдельно взятой небольшой шаражки. Т.е. всеми приказами, регламентами и распоряжениями отдельно взятой шаражки можно попу подтереть? Это ведь не ГОСТ и не ISO какое-то, так? Приходишь однажды в такую контору, и тебе говорят, — ты это.. код пиши по настроению, ясно тебе? Но чтобы название классов отражало суть и всем было всё понятно, окэй? Ну и чтобы модифировать было легко. Вот как-то так. Потом проходит время и какой-нибудь Алексей К смотри в код, и говорит что ему нехрена не понятно, и что вот эти названия совсем не отражают суть, потому что твои зелёные фломастеры ему кажутся синими. И ему совсем не кажется, что твой код легко модифицировать. И как он это объясняет? А вот так: я художник, я так вижу. В общем, детский сад, как он есть. Во всей красе. Ага. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 15:39 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVostt, Нафига придумывать свои "стайлгайде", отличные от общепринятых изначально, идущих от МС? Любой .NET программист привык к ним. Нафига вкрячивать слово Abstract? Ну префикс "A" еще куда не шло. Как бы ты назвал тот же Stream или TextReader? А серьезная бизнес-модель и иерархия наследования не предок-потомок? Типа Код: c# 1. 2. 3. 4.
или сложнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 17:56 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
ЕвгенийВНафига придумывать свои "стайлгайде", отличные от общепринятых изначально, идущих от МС? Где я такое говорил? Они вообще-то на них и базируются. ЕвгенийВЛюбой .NET программист привык к ним. Не любой, переучки (из делфи, java, C/C++...) ещё какое-то время создают локальный пздц в коде, пока не идут на поправку :) ЕвгенийВНафига вкрячивать слово Abstract? Ну префикс "A" еще куда не шло. Никто не вкорячивает слово Abstract, речь шла только о суффиксе Base. Если ты про пример, где класс называется SomeAbstract, это просто пример наименования класса, но я нигде не говорил, что это приставка какая-то. ЕвгенийВКак бы ты назвал тот же Stream или TextReader? Так бы и назвал. Хотя касательно Stream это величайшей фейл Microsoft. Нужен был интерфейс IStream, а не базовый класс. Это просто мега-отвратительное решение. А ещё лучше IReadStream и IWriteStrem, но уже поздно. ЕвгенийВили сложнее? В общем, не выдумывай. Я русскими словами описал наш стайл по поводу наименования базовых классов. Если класс выступает контрактом, никаких префиксов-суффиксов не предусмотрено. Если класс выступает только как базовая реализация и не фигурирует в контрактах, то используется суффикс Base. Смысл и польза от этого — достаточно очевидные. Как говорится, есть две самые страшные проблемы в программировании: придумывать имена переменных и инвалидировать кеш ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 18:08 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVostt Так бы и назвал. Хотя касательно Stream это величайшей фейл Microsoft. Нужен был интерфейс IStream, а не базовый класс. Это просто мега-отвратительное решение. А ещё лучше IReadStream и IWriteStrem, но уже поздно. Что тут то не так? Чем плох старина Stream? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 18:46 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
ЕвгенийВЧто тут то не так? Чем плох старина Stream? Тем, что требуется вынужденно наследоваться от класса, ты не можешь просто взять и реализовать интерфейс IStream, тебе придётся как минимум реализовать лишний адаптер. Чаще всего потоки используются только на чтение или только на запись, а клиентам теперь приходится лишний раз проверять Stream, умеет ли он то, что от него требуется (CanRead, CanWrite, CanSeek), вместо того, чтобы выяснить это ещё на стадии компиляции (IReadStream / IWriteStream / ISeekStream). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 19:09 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
hVostt, То, что нечто реализует например IReadStream - не означает, что в рантайме сможем читать. Да и при введении тех же тасков, потребовалось переписать только 1 класс! А так, был бы IReadStream, от него отнаследовали бы IReadStreamAsync, и пришлось реализовывать всех потомком IReadStream, добавив им асинхронности. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 19:26 |
|
Нейминг базовых классов
|
|||
---|---|---|---|
#18+
ЕвгенийВТо, что нечто реализует например IReadStream - не означает, что в рантайме сможем читать. Именно это и означает :) А если не сможем, то это очевидно ошибка. ЕвгенийВДа и при введении тех же тасков, потребовалось переписать только 1 класс! А так, был бы IReadStream, от него отнаследовали бы IReadStreamAsync, и пришлось реализовывать всех потомком IReadStream, добавив им асинхронности. А если твой стрим тупо не поддерживает асинхронный режим? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 19:58 |
|
|
start [/forum/topic.php?fid=20&fpage=41&tid=1399791]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 144ms |
0 / 0 |