julia_v_iluhina

Untitled

Oct 5th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.80 KB | None | 0 0
  1. public abstract class AbstractCondition<T> implements Condition<T>, DescribesResult{
  2.  
  3.     public LazyEntity<T> entity;
  4. /*
  5.     следи за рассуждениями - в этом классе - предке всех кондишенов - есть поле entity
  6.     и оно запоняется внутри apply
  7. */
  8. public abstract class AbstractCollectionCondition extends AbstractCondition<List<WebElement>> implements CollectionCondition {
  9.  
  10.     public LazyEntity entity;
  11.     /*
  12.         в потомке - снова объявили одноименное поле
  13.         заметь - оно не используется - серым шрифтом выводится
  14.         так зачем оно тут?
  15.     */
  16.     public abstract boolean check(List<WebElement> wrappedEntity);
  17.     /*
  18.         этот метод - объявлен еще в интерфейсе  Matcher<T>
  19.         который кондишены будут имплементировать
  20.  
  21.         тут - реализовывать мы его не будем
  22.         значит - смело убирай его объявление
  23.  
  24.         нам надо объявлять абстрактные методы - если мы
  25.         не имплементируем метод интерфейса, а просто - нужен
  26.         абстрактный метод на уровне класса
  27.         а мы имплементируем метод интерфейса - значит - уже все объявлено
  28.         и только когда надо будет реализовывать этот метод - он появится в классе
  29.  
  30.         на этом уровне - мы check не реализовываем
  31.     */
  32. public abstract class AbstractElementCondition extends AbstractCondition<WebElement> implements ElementCondition {
  33.  
  34.     public abstract boolean check(WebElement wrappedEntity);
  35. /*
  36.     тут уже нету проблемы с entity )
  37.     check - аналогично, можно не объявлять абстрактный класс
  38. */
  39.  
  40. ***********************************************
  41. public interface DescribesResult {
  42.  
  43.     public String identity();
  44.  
  45.     public String expected();
  46.  
  47.     public String actual();
  48. }
  49.  
  50. /*
  51.     есть предложение - чуть улучшить соответствие single responsibility principle )
  52.  
  53.     перенести метод identity() отсюда в интерфейс LazyEntity
  54.     и даже еще не так)
  55.     реализовать интерфейс DescribesEntity - c методом identity()
  56.     и от него отнаследовать LazyEntity
  57.  
  58.     реализовать такие методы - в AbstractLazyCollection  и AbstractLazyElement
  59.     кстати, может для коллекции - стоило бы возвращать не "elements", а "collection"
  60.  
  61.     и в toString() класса AbstractCondition<T>
  62.     оперируй не identity() = методом кондишена
  63.     а identity() =  методом lazyEntity
  64.  
  65.     тогда будет все четче
  66.     лейзи-сущность - будет сама про себя рассказывать - что за тим сущности(identity()) и подробности о сущности (toString)
  67.     а кондишен - будет рассказывать то, за что именно он отвечает - actual, expected, ну и его имя
  68. */
  69.  
  70. public abstract class AbstractElementCondition extends AbstractCondition<WebElement> implements ElementCondition
  71. public abstract class AbstractCollectionCondition extends AbstractCondition<List<WebElement>> implements CollectionCondition
  72. /*
  73.     в результате - в этих классах - не останется ничего кроме их объявления
  74.  
  75.     фактически, такой класс позволяет упростить объявления конечных кондишенов - не надо каждый раз долго описывать -
  76.     от чего наследуемся, как уточняем дженерик-тип и какой интерфейс имплементируем
  77.     потому - я бы оставила эти классы
  78.  
  79.     хотя - тезис спорный )
  80.     для приверженцев мысли inheritance is evil - особенно )
  81.  
  82.     если тебе кажется, что будет красивее без этой ступеньки в иерархии -
  83.     можешь ее убрать
  84. */
  85. *************************
  86. public boolean is(ElementCondition condition) {
  87. /*
  88.     все ок реализовано, убирай лишние комментарии
  89.  
  90.     ответила на первый твой вопрос )
  91. */
  92. *******************************
  93. public String searchResults = ".srg>.g";
  94. /*
  95.     сразу объявляй лейзи коллекцию
  96.      ты ж потом везде в коде оперируешь $$(searchResults)
  97. */
  98. **********************************
  99. Перешла с protected на public или private
  100. (в кондишенах, у которых есть наледники, например Size/MinimumSize,
  101. я поставила public, а в кондишенах, которые никем не наследуются, поставила private),
  102. но теперь меня смущает, что они реализованы неоднотипно…
  103. /*
  104.     тут - зона субъективных решений)
  105.  
  106.     я бы делала так
  107.     только ести я прямо намеренно хочу что-то спрятать
  108.     (как например sleep в WaitFor)
  109.     это я объявляю private
  110.  
  111.     остальное - public
  112. */
Advertisement
Add Comment
Please, Sign In to add comment