Тут стоит вспомнить эксперимент с группой шимпанзе, водой и бананами: "Так заведено!". Осталось разобраться почему.
Исходя из моего опыта, около 70% правил имеют смысл! А дальше эволюция, а не революция.
Я тоже приходил, "весь в белом"! А как вникаешь, начинаешь понимать почему было сделано именно так. Блин, предшественники тоже, наверное, не дураки были...
Здравствуйте, barn_czn, Вы писали:
_>Здравствуйте, Codealot, Вы писали:
C>>Здравствуйте, barn_czn, Вы писали:
_>>>мой рвотный рефлекс от открытых паблик полей, List<> повсюду разбросаных
C>>Это как?
_>
_>class A
_>{
_>public int MyInt;
_>public List<int> MyInts;
_>public List<float> Myfloats;
_>}
_>
Да вы, батенька, реального легаси не нюхали, раз такие вещи вызывают рвотный рефлекс.
Из недавнего: я вот тоже столкнулся с такими полями. Контекстно поискал использование вне класса (я же уже знаю, что такие штуки могут использоваться через отражение). Не нашел. А когда сделал приватными — внезапно приложение стало падать в случайных местах. Оказалось, в базе данных были записи с именами этих полей и этих классов. Записи читались из базы, классы инстанцировались, поля проставлялись через отражение.
Здравствуйте, Gradiens, Вы писали:
G>Здравствуйте, barn_czn, Вы писали:
_>>Здравствуйте, Codealot, Вы писали:
C>>>Здравствуйте, barn_czn, Вы писали:
_>>>>мой рвотный рефлекс от открытых паблик полей, List<> повсюду разбросаных
C>>>Это как?
_>>
_>>class A
_>>{
_>>public int MyInt;
_>>public List<int> MyInts;
_>>public List<float> Myfloats;
_>>}
_>>
G>Да вы, батенька, реального легаси не нюхали, раз такие вещи вызывают рвотный рефлекс.
да я и не соревнуюсь в нюхании гавнокода.
G>Из недавнего: я вот тоже столкнулся с такими полями. Контекстно поискал использование вне класса (я же уже знаю, что такие штуки могут использоваться через отражение). Не нашел. А когда сделал приватными — внезапно приложение стало падать в случайных местах. Оказалось, в базе данных были записи с именами этих полей и этих классов. Записи читались из базы, классы инстанцировались, поля проставлялись через отражение.
что то не уловил. Вывод то какой? Гавнокод существует?
Как я понял, автор относится к подвиду программистов "да что тут думать, тут прыгать надо!". А контора расчитывала на несколько другой типаж.
Ну слава богу во всём разобрались до окончания испытательного срока. Фактически каждый остался при своих с минимальными потерями времени. Чего кипишить?
_>что то не уловил. Вывод то какой? Гавнокод существует?
Ну вывод такой, что бывает и такой говнокод, который "нельзя" трогать. И ничего, как-то с ним живем.
Но делать код лучше — это часть нашей специальности.
В твоем примере ты жаловался на открытые поля-коллекции.
Увидел открытое поле — полазил по местам использования — отрефакторил — закоммитил — пилишь свою таску дальше.
Я сравниваю проект с башенкой из детских кубиков. Чем ровнее кладешь кубики — тем выше башенка. Иногда даже можно поправить нижние этажи, чтобы башенка не рассыпалась.
Настоящие профи — это не те, кто строит быстро. Это те, кто строит высоко и надолго.
А прийти и сказать: давайте башенку сломаем и новую построим — много ума не надо.
Здравствуйте, Codealot, Вы писали:
C>То есть пойнт в том, что не было скрыто что-то, что можно было скрыть? А List<> тут при чем?
Есть мнение, что наружу стоит выставлять интерфейсный тип IList<> вместо конкретного класса List<>. То же самое касается и других стандартных контейнеров типа IDictionary<,> vs Dictionary<,>.
Здравствуйте, Sealcon190, Вы писали:
S>Как я понял, автор относится к подвиду программистов "да что тут думать, тут прыгать надо!". А контора расчитывала на несколько другой типаж.
Мне кажется, все программисты на заре своей карьеры проходят через такой этап, когда "чего тут думать — копать надо!". Но, как видим, некоторые застревают на этом этапе слишком долго.
K>Есть мнение, что наружу стоит выставлять интерфейсный тип IList<> вместо конкретного класса List<>. То же самое касается и других стандартных контейнеров типа IDictionary<,> vs Dictionary<,>.
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, koandrew, Вы писали:
K>>Есть мнение, что наружу стоит выставлять интерфейсный тип IList<> вместо конкретного класса List<>. То же самое касается и других стандартных контейнеров типа IDictionary<,> vs Dictionary<,>.
S>либо Ienumerable<T>.
спасибо, хоть ктото. На крайняк вместо List<> выставляют массив.
Здравствуйте, koandrew, Вы писали:
K>Здравствуйте, Sealcon190, Вы писали:
S>>Как я понял, автор относится к подвиду программистов "да что тут думать, тут прыгать надо!". А контора расчитывала на несколько другой типаж. K>Мне кажется, все программисты на заре своей карьеры проходят через такой этап, когда "чего тут думать — копать надо!". Но, как видим, некоторые застревают на этом этапе слишком долго.
Откуда так много тролей? копать , прыгать.. вы через строки читаете? Мне не над чем было ни думать ни копать ни прыгать. По русски пишу — сорцов я так и не увидел.
Здравствуйте, koandrew, Вы писали:
K>Здравствуйте, Sharov, Вы писали: S>>Либо readonlycollection, либо Ienumerable<T>. K>А если необходимо менять коллекцию из внешнего кода?
1)Я имел в виду не вместо, а + к IList
2)Делать свою копию и менять.
Здравствуйте, koandrew, Вы писали:
K>Есть мнение, что наружу стоит выставлять интерфейсный тип IList<> вместо конкретного класса List<>. То же самое касается и других стандартных контейнеров типа IDictionary<,> vs Dictionary<,>.
В каких-то случаях это может быть нужно, но делать это всегда — не вижу смысла.
Здравствуйте, barn_czn, Вы писали:
_>Задавал. Ответ — политика безопасности. _>Дело даже ни в том почему. Меня бы устроил любой ответ, даже "ни хотим, ты любопытный". _>Дело в том — а как вообще работать?
Я, когда перешел в банк работать, где-то 1.5-2 месяца не имел доступов к рабочей виртуалке (не мог код посмотреть, не мог в джиру зайти и т.д.). Вообще не делал из этого трагедии. Зато прошел целую кучу тренингов по безопасности, корпоративным политикам и т.д. Ну и много нового изучил.
Деньги платят и хотят чтобы лекции слушал — почему не послушать? Ну и есть время выучить что-то новое.
Здравствуйте, koandrew, Вы писали:
C>>То есть пойнт в том, что не было скрыто что-то, что можно было скрыть? А List<> тут при чем?
K>Есть мнение, что наружу стоит выставлять интерфейсный тип IList<> вместо конкретного класса List<>. То же самое касается и других стандартных контейнеров типа IDictionary<,> vs Dictionary<,>.
Карго-культ? А что плохого будет, если выставить List вместо IList?
А мнения всякие есть, без вопросов.
Здравствуйте, Sharov, Вы писали:
K>>Есть мнение, что наружу стоит выставлять интерфейсный тип IList<> вместо конкретного класса List<>. То же самое касается и других стандартных контейнеров типа IDictionary<,> vs Dictionary<,>.
S>Либо readonlycollection, либо Ienumerable<T>.
Там, где надо readonlycollection — readonlycollection. Там, где надо Ienumerable<T> — Ienumerable<T>. Там, где надо List — List. Там, где пофиг — пофиг.
Здравствуйте, AlexRK, Вы писали:
ARK>Карго-культ? А что плохого будет, если выставить List вместо IList?
У IList куча реализаций, и бывает потребность их менять не меняя интерфейса. Замена же List на Array например, при необходимости, хорошо если выльется в рефакторинг только вашего кода, а например в случае общих библиотек (особенно если не только ваш код их использует) сломает обратную совместимость и создаст кучу гемороя.
Так что это не карго-культ, а просто практика написания хорошего кода (как и с read-only коллекциями). Опят же, как и всегда, тут надо включать голову т.е. если вы разрабатываете небольшой проект и на 100% уверены что не будете публиковать интерфейсы, то можно и List везде использовать (в крайнем случае сделаете небольшой рефакторинг если потребуется реализацию поменять).
P.S. Вообще это всё уже расжёвано и пережовано 1000 раз (тут например). Так что barn_czn прав посылая всех страждущих знаний в google за такими ответами.
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Здравствуйте, Closer, Вы писали:
ARK>>Карго-культ? А что плохого будет, если выставить List вместо IList?
C>У IList куча реализаций, и бывает потребность их менять не меняя интерфейса. Замена же List на Array например, при необходимости, хорошо если выльется в рефакторинг только вашего кода, а например в случае общих библиотек (особенно если не только ваш код их использует) сломает обратную совместимость и создаст кучу гемороя.
Да-да, замена List на Array с интерфейсом IList — это великолепно.
C>Так что это не карго-культ, а просто практика написания хорошего кода (как и с read-only коллекциями). Опят же, как и всегда, тут надо включать голову т.е. если вы разрабатываете небольшой проект и на 100% уверены что не будете публиковать интерфейсы, то можно и List везде использовать (в крайнем случае сделаете небольшой рефакторинг если потребуется реализацию поменять).
Я про это и говорю. Где надо — там надо. А не "надо прям везде!!1". Из одного только факта наличия поля типа List не следует ровным счетом ничего.
C>P.S. Вообще это всё уже расжёвано и пережовано 1000 раз (тут например). Так что barn_czn прав посылая всех страждущих знаний в google за такими ответами.
Спасибо, но лично я карго-культы давно уже не котирую.
Здравствуйте, Closer, Вы писали:
C>Опят же, как и всегда, тут надо включать голову т.е. если вы разрабатываете небольшой проект и на 100% уверены что не будете публиковать интерфейсы, то можно и List везде использовать (в крайнем случае сделаете небольшой рефакторинг если потребуется реализацию поменять).
Именно, надо включать голову, а не лепить интерфейсы везде-везде-везде. Кроме того, остается открытым вопрос, что плохого в "public int MyInt;"