Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
0 / 0 / 1
Регистрация: 26.04.2018
Сообщений: 7

Как вынести определённый механизм в отдельный класс и затем обращаться к нему и правильно ли это с точки зрения ООП

18.02.2019, 15:09. Показов 3191. Ответов 2

Студворк — интернет-сервис помощи студентам
Как вынести определённый механизм в отдельный класс и затем обращаться к нему и правильно ли это с точки зрения ООП.
есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Windows.Forms;
 
namespace InstaBulochka
{
    public partial class Form1 : Form
    {
 
        IWebDriver web;
        public Form1()
        {
          
            
            ChromeOptions options = new ChromeOptions();
            options.AddArguments("--headless"); //
            web = new ChromeDriver(@"D:/");
            web.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
 
            InitializeComponent();
 
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
          
            
            web.Navigate().GoToUrl("https://www.123.com/accounts/login/");
            web.FindElement(By.CssSelector("input[name='username']")).SendKeys("login");
            web.FindElement(By.CssSelector("input[name='password']")).SendKeys("passport");
            web.FindElement(By.CssSelector("input[name='password']")).SendKeys(OpenQA.Selenium.Keys.Enter);
            try { String err = web.FindElement(By.CssSelector("#slfErrorAlert")).Text;
                Console.WriteLine(err);
            } catch (Exception ) { Console.WriteLine("log and pass is good"); }
 
        
 
            Console.WriteLine(isSMSOnPagePresent("Подозрительная попытка входа"));
 
 
        }
 
        public Boolean isSMSOnPagePresent(String text) {
            IWebElement body = web.FindElement(By.TagName("body"));
            String bodyText = body.Text;
            return bodyText.Contains(text);
        }
    }
}
Хотелось бы, весь процесс авторизации вынести в отдельный класс ну скажем avtoriz (мне кажется так удобнее) и обращаться к нему из главного класса Form1. Как-то так, абстрактно: avtoriz.авторизироваться(лог,пасс); при этом конструктор IWebDriver web; должен быть именно только в классе Form1, и не создавая новых экземпляров объекта.

Подскажите, пожалуйста, решение желательно кодом.
И с точки зрения ООП правильно ли я хочу сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2019, 15:09
Ответы с готовыми решениями:

Что здесь не правильно с точки зрения ООП
Делаю себе классы для авторизация через разные соц.сети (в сети есть решения)Но мне не нужен чужой велосипед. Я хочу свое, ибо так я...

как вынести класс в отдельный файл?
сделал простенький класс class cool { public: cool(); int ga(); int gb(); void sa(int _a);

Как вынести метод в отдельный класс?
Помогите вынести методы в отдельный класс package fibonachi; import java.util.Random; public final class Fibonachi { ...

2
0 / 0 / 1
Регистрация: 26.04.2018
Сообщений: 7
18.02.2019, 21:34  [ТС]
Если говорить глобальнее и проще, вот что я хочу: открыть единожды браузер IWebDriver web; и работать во всех классах только с ним, не создавая новых окон браузера.
0
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 10
23.03.2019, 05:10
Как мне кажется вам стоит подумать о классе фасад (паттерн Фасад) ну или на худой конец класс служба (что может быть одним и тем же). Просто из выше приведенного кода я так понимаю при запуске самого Windows приложения объект IWebDrive контекстный и создается только на сессию самого приложения. Как вариант данный объект по возможности можно поместить в класс Фасад в котором уже будут собраны все остальные объекты классов, которые и будут представлять из себя само приложение. А у самого объекта фасада Будет унифицированный интерфейс для доступа к определенным функциям.
C#
1
2
3
4
5
6
7
8
9
10
11
 class WebDriveService //ну или что это за приложение тогда стоит думать как будет называться класс
{
    private IWebDrive web;
    public WebDriveService(string type)
    {
         web = Factory.Create(type);
    }
    
    public string Authentification()
    {//some code}
}
А объект IWebDrive скорее всего должен создаваться через фабрику (вдруг вам придется создавать конкретный объект не только для Chrome).
Выделять отдельный класс авторизации в этом случаи как по мне не стоит. Так как в таком случаи для каждого чиха вам придется создавать отдельный класс для каждого функционала и в него передавать объект IWebDrive. Такое может и будет целесообразно если для каждой конкретной реализации класса IWebDrive будет различаться поведение. Например если для метода Authorize(string login, string password) будет различаться поведение в зависимости от того какой объект IWebDrive придет к нему (Chrome, FireFox). Иначе могут появляться строчки вида:
C#
1
2
3
4
5
6
7
8
if(web is ChromeDrive)
{
   //some code
}
if(web is FireFoxDrive)
{
   //some code
}
А тут уже явно появляется семейство объектов, а это абстрактная фабрика. Кроме всего прочего в вашем примере вы работаете только с одним объектом. Дополнительного функционала отличного от функционала объекта IWebDrive не наблюдается. А значит и скрывать(инкапсулировать), что-то в других классах не имеет смысла.
Кроме всего прочего если сам проект не заточен под долгую поддержку то зачем создавать лишние классы.

Добавлено через 11 минут
Еще как вариант можно написать класс обертку поверх функционала IWebDrive. И от этого класса уже могут идти наследники в зависимости от конкретной реализации IWebDrive.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2019, 05:10
Помогаю со студенческими работами здесь

Как вынести в отдельный класс блок try . catch
Проблема следующая: на сервере есть много сервисов. Моя задача - перехватывать и обрабатывать ошибки этих сервисов. Обработка ошибок...

Как вынести класс в отдельный файл с namespace?
Добрый вечер, есть проблема, не выносится класс в отдельный файл, пишет что переопределение типа class. Подскажите пожалуйста, как быть. ...

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

Как вынести класс в отдельный файл сочетаниями клавиш
Подскажите, в vs как вынести класс в отдельный файл сочетанием клавиш?

Как вынести метод, обрабатывающий включение радиокнопок, в отдельный класс
Есть радиобаттоны в форме. собственно в классе формы есть метод private void CurrentBuildingCheckedChanged(object sender,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru