Как правильно организовать структуру класса?

Всем привет.

Решил для практики es6 написать плагин для собственного пользования. И при продумывание структуры класса плагина столкнулся с следующей проблемой.

Допустим при создании экземпляра класса я подаю в него два параметра, url и имя элемента.

Мне нужно три метода:
1. - Парсинг url
2. - Парсинг имени
3. - Основная логика.

Но как заставить плагин работать, создав только экземпляр класса?

На ум приходит только одна идея, но мне кажется это костыли. Создать метод main(), и в него засунуть вызов тех трёх методов. После, вызов метода main(), просто засунуть в конструктор.

Подскажите, как правильно реализовать архитектуру класса?
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
Если что-то попроще, но при этом более-менее ООПшное, то можно как-то так:

class Plugin {

	constructor (rawUrl, rawName) {
		this.url = new UrlParser(rawUrl);
		this.name = new NameParser(rawName);
	}

	doSomething () {
		// code
	}
}

function userCode() {
    new Plugin("example.com", "FooBar").doSomething()
}


Если хотите побольше DI и всего такого, но при этом не потерять лёгкость использования, то можно так:

class Plugin {

	constructor (urlParser, nameParser) {
		this.url = urlParser;
		this.name = nameParser;
	}
	
	doSomething () {
		// code
	}

}

Plugin.init = function (url, name) {
	return new Plugin(
		new UrlParser(url),
		new NameParser(name)
	);
}

function userCode() {
	Plugin.init("example.com", "FooBar").doSomething()
}


UrlParser и NameParser - это классы, которые парсят всё необходимое, а потом внутри имеют свойства для обращения к ним.

class UrlParser {

	constructor (urlString) {
		var result = this.matchUrlStrign(urlString)
		
		this.anchor = result[0];
		this.path   = result[1];
		// etc
	}
}


Соответственно, в плагине используете как-то так:
this.url.anchor
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы