Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class AbstractCondition<T> implements Condition<T>, DescribesResult{
- public LazyEntity<T> entity;
- /*
- следи за рассуждениями - в этом классе - предке всех кондишенов - есть поле entity
- и оно запоняется внутри apply
- */
- public abstract class AbstractCollectionCondition extends AbstractCondition<List<WebElement>> implements CollectionCondition {
- public LazyEntity entity;
- /*
- в потомке - снова объявили одноименное поле
- заметь - оно не используется - серым шрифтом выводится
- так зачем оно тут?
- */
- public abstract boolean check(List<WebElement> wrappedEntity);
- /*
- этот метод - объявлен еще в интерфейсе Matcher<T>
- который кондишены будут имплементировать
- тут - реализовывать мы его не будем
- значит - смело убирай его объявление
- нам надо объявлять абстрактные методы - если мы
- не имплементируем метод интерфейса, а просто - нужен
- абстрактный метод на уровне класса
- а мы имплементируем метод интерфейса - значит - уже все объявлено
- и только когда надо будет реализовывать этот метод - он появится в классе
- на этом уровне - мы check не реализовываем
- */
- public abstract class AbstractElementCondition extends AbstractCondition<WebElement> implements ElementCondition {
- public abstract boolean check(WebElement wrappedEntity);
- /*
- тут уже нету проблемы с entity )
- check - аналогично, можно не объявлять абстрактный класс
- */
- ***********************************************
- public interface DescribesResult {
- public String identity();
- public String expected();
- public String actual();
- }
- /*
- есть предложение - чуть улучшить соответствие single responsibility principle )
- перенести метод identity() отсюда в интерфейс LazyEntity
- и даже еще не так)
- реализовать интерфейс DescribesEntity - c методом identity()
- и от него отнаследовать LazyEntity
- реализовать такие методы - в AbstractLazyCollection и AbstractLazyElement
- кстати, может для коллекции - стоило бы возвращать не "elements", а "collection"
- и в toString() класса AbstractCondition<T>
- оперируй не identity() = методом кондишена
- а identity() = методом lazyEntity
- тогда будет все четче
- лейзи-сущность - будет сама про себя рассказывать - что за тим сущности(identity()) и подробности о сущности (toString)
- а кондишен - будет рассказывать то, за что именно он отвечает - actual, expected, ну и его имя
- */
- public abstract class AbstractElementCondition extends AbstractCondition<WebElement> implements ElementCondition
- public abstract class AbstractCollectionCondition extends AbstractCondition<List<WebElement>> implements CollectionCondition
- /*
- в результате - в этих классах - не останется ничего кроме их объявления
- фактически, такой класс позволяет упростить объявления конечных кондишенов - не надо каждый раз долго описывать -
- от чего наследуемся, как уточняем дженерик-тип и какой интерфейс имплементируем
- потому - я бы оставила эти классы
- хотя - тезис спорный )
- для приверженцев мысли inheritance is evil - особенно )
- если тебе кажется, что будет красивее без этой ступеньки в иерархии -
- можешь ее убрать
- */
- *************************
- public boolean is(ElementCondition condition) {
- /*
- все ок реализовано, убирай лишние комментарии
- ответила на первый твой вопрос )
- */
- *******************************
- public String searchResults = ".srg>.g";
- /*
- сразу объявляй лейзи коллекцию
- ты ж потом везде в коде оперируешь $$(searchResults)
- */
- **********************************
- Перешла с protected на public или private
- (в кондишенах, у которых есть наледники, например Size/MinimumSize,
- я поставила public, а в кондишенах, которые никем не наследуются, поставила private),
- но теперь меня смущает, что они реализованы неоднотипно…
- /*
- тут - зона субъективных решений)
- я бы делала так
- только ести я прямо намеренно хочу что-то спрятать
- (как например sleep в WaitFor)
- это я объявляю private
- остальное - public
- */
Advertisement
Add Comment
Please, Sign In to add comment