Как совместить паттерны и не получить говнокод?

Доброго времени суток, встал в тупик, создаю небольшое single page aplication. Пусть наш глобальный, абстрактный объект представлен, как app и описан, как модуль. App состоит из панели управления - manipulation и объектов - matrix, которые управляется, непосредственно, с помощью - manipulation. Matrix - определяется, как псевдокласс.

Как организовать архитектуру программы, чтобы при инициализации всего приложения (после загрузки документа) была возможность инициализации объектов - matrix?

Наведите, пожалуйста, на верный путь :)
  • Вопрос задан
  • 2346 просмотров
Решения вопроса 1
@vasIvas
Если я правильно Вас понял, то вот как-то так -
var App = ( function( ){
	// свойства объявляются в начале
	var app = Object.create( null ),
		manipulation,
		matrix,
		main;
	
	document.addEventListener( 'DOMContentLoaded', document_domContentLoadedHandler );

	function document_domContentLoadedHandler( ){
		document.removeEventListener( 'DOMContentLoaded', document_domContentLoadedHandler );

		main = new Main( );
	}

	// точка входа в приложение.
	// обычно, приложение не состоит 
	// из двух классов и инициализация его
	// очень долгий и крапотливый момент,
	// который требует много внимания к последовательности
	// создания объектов. По этому, у меня обычно отдельный
	// класс этим занимается. Обычно, это когда без фраймворков.
	// 
	// Так же стои отметить, что этот класс Main обычно пишится 
	// в отдельном файле и состоит из, порой, тысячи строк.
	// Я это говорю к тому, что если покажется, что он излишний,
	// то представьте приложение из сотни классов, в которых запутаться,
	// легче чем кажется. И класс Main используется только для того,
	// чтобы читать приложение в одном месте, а не гонять из файла в файл,
	// в надежде понять, ЧТО ЭТО??? 
	var Main = ( function( ){
		function Main( ){

		}

		Main.prototype.init = function( ){
			matrix = this.installMatrix( );
			manipulation = this.installManipulation( matrix );// передаем ссылку для манипулирования
		};

		Main.prototype.installManipulation = function( ){
			// ...
			return new Manipulation( );
		};

		Main.prototype.installMatrix = function( ){
			// ...
			return new Matrix( );
		};

		return Main;
	} )( );

	//
	var Manipulation = ( function( ){
		function Manipulation( ){}
		return Manipulation;
	} )( );

	//
	var Matrix = ( function( ){
		function Matrix( ){}
		return Matrix;
	} )( );

	return Object.defineProperties( app, {
		manipulation: {
			get: function( ){return manipulation;}
		},
		name: {
			get: function( ){return 'App';}
		},
		toString: {
			value: function( ){return '[object ' + this.name + ']'}
		}
	} );
} )( );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы