Возникла идея реализовать на сайте что-то вроде пространства имен.
Но есть сомнения правильности кода с точки зрения [нормального] программирования.
Допустим есть сайт app.ru,
есть раздел продавца app.ru/seller/
есть раздел продавца со списком продуктов app.ru/seller/catalog/
Решено было сделать главный объект App в одном файле и объекты App.Seller для раздела app.ru/seller/ и App.Seller.Catalog для раздела app.ru/seller/catalog/, но, чтобы в этих объектах (свойствах App) объект App был доступен через this.
Нормальна ли с точки зрения производительности и адекватности такая реализация?
Код:
1.
файл App.js (подключается на всем сайте)
содержит основные действия для всего сайта:
;(function($, window){
// ... какие-то действия
var AbstractApp = function() {
this.module = module;
this.app_type = app_type;
this.action = action;
};
// функции доступные в наследниках типа App.Seller и App.Seller.Catalog через this
AbstractApp .prototype = {
build_style : function() {
// ... инициализация главного модуля
}
// .... и т.д.
}
// собственные свойства глобального App ( не доступны в дочерних классах )
var App = {
Init : function() {
//...
this.set_events ();
},
set_events : function() {
// события для всего сайта
}
// ....
}
// чтобы можно было обратиться из подключаемых файлов
window.AbstractApp = AbstractApp;
window.App = $.extend(new AbstractApp(), App);
})(jQuery, window);
$(document).ready(function(){
// стартуем App
App.Init();
});
2.
файл App.Seller.js подключается в разделе app.ru/seller/
(function($, window) {
window.App.Seller = $.extend(new AbstractApp(), {
// собственные методы и свойства для раздела app.ru/seller/
Init : function() {
this.set_events();
},
set_events : function() {
// события для раздела app.ru/seller/
},
});
})(jQuery, window);
$(document).ready(function(){
// стартуем App.Seller
App.Seller.Init();
});
3.
файл App.Seller.Catalog.js подключается в разделе app.ru/seller/catalog/
(function($, window) {
window.App.Seller.Catalog = $.extend(new AbstractApp(), {
// собственные методы и свойства для раздела app.ru/seller/catalog/
Init : function() {
this.set_events();
},
set_events : function() {
// события для раздела app.ru/seller/catalog/
},
});
})(jQuery, window);
$(document).ready(function(){
// стартуем App.Seller.Catalog
App.Seller.Catalog.Init();
});
Что получается: методы App.Seller и App.Seller.Catalog являются как-бы классами, и вроде получается что-то типа пространства имен.
Или это не очень правильное решение?