Как управлять особыми случаями и эвристикой

Я новичок в Sencha / Ext JS, но я думаю, что в этот момент странное представление о наличии сокращенной строки идентификатора определения только для компонентов пользовательского интерфейса должно удовлетворять устаревшим пользователям.

Посмотрите «Список xtypes» здесь: http://docs.sencha.com/touch/2-0/#!/guide/components

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

Проверьте следующий пример некоторых сопоставлений имен xtype и класса для Sencha touch:

  • video - Ext.Video
    Хорошо, такого рода имеет смысл - строчная версия имени «класса»
  • carousel - Ext.carousel.Carousel
    То же самое здесь
  • carouselindicator - Ext.carousel.Indicator
    Хм, хорошо - мы тоже включим пакет
  • navigationview - Ext.navigation.View
    И снова здесь
  • datepicker - Ext.picker.Date
    Хорошо, wtf?

Некоторые из приведенных выше аргументов для xtype заключались в том, что он допускает отложенную реализацию компонентов. Я думаю, что это совершенно не имеет значения - то, что допускает отложенное создание экземпляров, это тот факт, что Sencha / Ext JS поддерживает спецификацию строкового идентификатора вместо экземпляра компонента в иерархии представления.

Отображение конкретной строки в конкретный компонент, который может быть создан позже, является совершенно произвольным, а в случае с Sencha / Ext JS, к сожалению, глупым (см. Примеры выше).

По крайней мере, просто следуйте разумному шаблону - например, почему у Ext.Label не может быть «xtype» из Label? Слишком просто?

На самом деле я знаю почему - это потому, что они сделали хорошо читаемые имена xtype - есть много повторяющихся имен классов, которые не будут работать (Ext.Panel и Ext.tab.Panel), и pickerDate будет звучать глупо.

Но мне все еще не нравится - это странный маленький противоречивый ярлык, который запутывает больше, чем помогает.

6
задан starblue 6 June 2009 в 08:20
поделиться

8 ответов

If you have a knowledge base or a wiki for the project, you could add the graph in it, linking to it in the method as per Matthew's Fowler quote and also in the source control commit message for the edge case change.

//See description at KB#2312
private object SolveXAndYEdgeCase(object param)
{
   //modify param to solve for edge case
   return param;
}

Commit Message: Solution for X and Y edge case, see description at KB#2312

It is more work, but a way to document cases more thoroughly than mere test cases or comments could. Even though one might argue that test cases should be documentation enough, you might not want store the whole failing data set in it, for instance.

Remember, vague problems lead to vague solutions.

2
ответ дан 8 December 2019 в 16:09
поделиться

Мартин Фаулер сказал в своей книге по рефакторингу, что, когда вы чувствуете необходимость добавить комментарий к вашему коду, сначала посмотрите, можете ли вы инкапсулировать этот код в метод и дать этому методу имя, которое замените комментарий.

, чтобы в качестве аннотации вы могли создать метод с именем.

private bool ConditionXAndYHaveOccurred(object param)
{
   // code to check for conditions x and y
   return result;
}

private object ApplySolutionForEdgeCaseWhenXAndYHappen(object param)
{
   //modify param to solve for edge case
   return param;
}

Затем вы можете написать код вроде

if(ConditionXAndYHaveOccurred(myObject))
{
    myObject = ApplySolutionForEdgeCaseWhenXAndYHappen(myObject);
}

Не жесткий и быстрый конкретный пример, но он поможет с удобочитаемостью через год или два.

6
ответ дан 8 December 2019 в 16:09
поделиться

Unit testing can help here. Having tests that actually simulate the special cases can often serve as documentation on why the code does what it does. This can often be better then just describing the issue in a comment.

Not that this replaces moving the special case handling to their own functions and decent comments...

4
ответ дан 8 December 2019 в 16:09
поделиться

I'm not usually an advocate of test driven development and similar styles that stress tests too much, but this seems to be a perfect case where a bunch of unit test can help a lot. And not even in the first place to catch bugs from later changes, but simply to document all the special cases that need to be addressed.

A few good unit test with comments in them are in itself the best description of the special cases. And the commenting of the code itself gets easier too. One can simply point to some unit tests that illustrate the problem that is being solved at that point in the code.

1
ответ дан 8 December 2019 в 16:09
поделиться

About the

I sometimes wish there was a way to embed or link graphics in the source code, so I could say effectively, "in the graph of this data set, this particular feature here was causing the routine to trigger incorrectly, so that's why this piece of code was added".

part:

If the "graphic" that you want to embed is a graph, and if you use Doxygen, you can embed dot commands in your comment to generate a graph in the documentation:

/**
If we have a subgraph looking like this:
\dot
digraph g{
A->B;
A->C;
B->C;
}
\enddot
the usual method does not work well and we use this heuristic instead.
*/
1
ответ дан 8 December 2019 в 16:09
поделиться

Дон Кнут изобрел грамотное программирование , чтобы упростить включение в документацию вашей программы графиков, графиков, диаграмм, математических уравнений и всего остального, что вам нужно для понимания. . Грамотная программа - отличный способ объяснить, почему что-то такое, как оно есть, и как это стало таким со временем. Существует множество инструментов для грамотного программирования; Инструмент "noweb" - один из самых простых и входит в состав некоторых дистрибутивов Linux.

1
ответ дан 8 December 2019 в 16:09
поделиться

It sounds like you need more thorough documentation than just code comments. That way someone could look up the function in question in the documentation and be presented with an example picture that requires a special case.

0
ответ дан 8 December 2019 в 16:09
поделиться

Не зная конкретной природы вашей проблемы, нелегко дать ответ, но по моему собственному опыту, следует избегать обработки особых случаев в жестком коде. Разве вы не думали о реализации механизма правил или чего-то подобного для обработки особых случаев вне вашего основного алгоритма обработки?

0
ответ дан 8 December 2019 в 16:09
поделиться