1. C# / Говнокод #2683

    +114.3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    public static MapObjectConfig[] CollectInfoAboutClassesInProgram()
    	{
    		List<MapObjectConfig> result = new List<MapObjectConfig>();
    		foreach (Assembly assem in AppDomain.CurrentDomain.GetAssemblies())
    			foreach (Module module in assem.GetModules())
    				try
    				{
    					foreach (Type type in module.GetTypes())
    						if (type.IsSubclassOf(typeof(BaseMapObject)))
    						{
    							MethodInfo method = type.GetMethod("GetCommentDescription", BindingFlags.Static | BindingFlags.Public);
    							if (method != null)
    							{
    								object res = method.Invoke(null, null);
    								if (res is MapObjectConfig)
    								{
    									MapObjectConfig desc = (MapObjectConfig)res;
    									result.Add(desc);
    								}
    							}
    						}
    				}
    				catch (ReflectionTypeLoadException ex)
    				{
    					//иногда отказывается загружать типы...
    				}
    		return result.ToArray();
    	}

    Метод являет собой пожалуй самую проктологическую реализацию хранения дефолтных настроек, которую когда-либо видел. Просмотр всех сборок загруженых в домен приложения, поиск в них классов наследованных от BaseMapObject и вызов их метода GetCommentDescription, который и вернет объект с настройками... Нельзя обезьянам давать гранаты товарищи.

    Запостил: svist, 27 Февраля 2010

    Комментарии (4) RSS

    • Где говнокод?
      Ответить
      • говнокод в том, что настройки всякие обычно забивают во всякие XML или что-то подобное, а не делают отдельный метод в классе и вызывают его таким рациональным способом.
        Ответить
        • Вовсе нет. Вы подразумеваете что настройки статичны. А они вполне могут быть зависимы от окружения, к примеру пути куда нибудь, разрешение экрана etc.
          Ответить
          • если бы так... но все исходники передо мной и настройки все тупо вбиты в код. И никакой их зависимости от окружения даже не предполагалось)).
            История происхождения сего говнокода длинная... Писался некий компонент для работы с географическими картами и естествено были выделены отдельные классы для различных типов георафических объектов (количество их заранее планировалось аж 4 штуки). Вот для этих то классов настроечки и нужны типа стили линий, подписей и прочая хрень связанная с их отображением. Все это было в одной сборке и мирно жило да работало. Поручили дописывать сие хозяйство некому говнокодеру. Результат: он классы для географических объектов начал писать не в единой сборке, а растаскивать по сборкам в которых пользовался компонент картографический. Ну а когда пришло время настройки все оформить, то он родил говно такое. Впрочем даже если растащить классы как было сделано неким говнокодером, то для загрузки настроек можно реализовать и более простые подходы.
            Да самый смак будет если в один прекрасный день скажут типа сделать у всех объектов дефолтный цвет красный, например...Хаха, сей говнокод наводит на говнорешение проблемы...)))))))
            Ответить

    Добавить комментарий