Я за, не всем заказчикам нужны все твои фичи, которые ты впихиваешь в свой большой пакет. + интересные части большого пакета, можно впихнуть за доп деньги. + мелкие пакеты проще модифицировать под нужды заказчиков
Я ЗА разделение если это сделано с умом. Но как показывает практика далеко не всегда это получается сделать красиво и приходится придумывать кучу костылей.
Как это? Зачем. Я понимаю бизнес логику еще разделить, но объекты от логики отделять? И что потом с этими пакетами делать отдельно? Я так понимаю это для простоты сборки сделано, но не для продажи.
Мы это продовали и очень даже успешно но не через апекс ченч,суть проста,на основание объектов БД строится не один пакет, другие какие то дополнительные объект в БД могут еще прийти из других пакетов но в основном,был один пакет костяк и на него еще можно было поставить пять шесть пакетов сверху в зависимости от нужды клиентов.
Нормальная практика мы так делали логика БД и объекты БД была в одном пакете сама визуальная часть в другом.
Как это? Зачем. Я понимаю бизнес логику еще разделить, но объекты от логики отделять? И что потом с этими пакетами делать отдельно? Я так понимаю это для простоты сборки сделано, но не для продажи.
Мы это продовали и очень даже успешно но не через апекс ченч,суть проста,на основание объектов БД строится не один пакет, другие какие то дополнительные объект в БД могут еще прийти из других пакетов но в основном,был один пакет костяк и на него еще можно было поставить пять шесть пакетов сверху в зависимости от нужды клиентов.
Как ни странно, наверно, большая часть людей на форуме работала в ВРП, ну или мне так кажется)
Наверное больше из бывших ВРП. Которые начинают работать сами и кому не хватает офисного общения. Те, кто из офиса не особо жалуют форумы на технические темы, им больше про что-то мирское за кофе поговорить, да офис менеджеров женского пола покадрить. Сам поражался - сайт крутился наверное год как я работал там - все про него знали, но никто не регистрировался. Зато помню статьи писали большие и хорошие для внутренней wiki которая нафиг никому не нужна (пустая трата времени и сил).
Она самая, а смысл? Статьи никто не читает (в wiki от atlasian вообще хер чего найдешь) и смысла от них 0. Польза только лиду знать что у него есть N статей. А в статьях ничего секртеного нет, просто переработанная документация.
А сделали бы открытый блог - получили бы отличную рекламную площадку для людей в теме. Могли бы себя продвигать. А то смотришь на корпоративный сайт аж плакать хочется. Такие наверное студенты гуманитарных вузов делают на уроках информатики, а мля, фирма то айтишная, не барыг с рынка.
Согласен мне тоже нравятся! И деньги свои однозначно стоит. Но вот я с wiki работал как рядовой пользователь на фирме. Скажу что просто так найти там ничего не возможно. Помню специально просил людей чтобы скинули прямую ссылку на доку, потому что по навигации ничего вообще найти не мог. Может если бы поработал более плотно, разобрался. Но вот такая была проблема. И кстати, не от меня одного это исходит.
Ну в принципе если это продукт не самой компании, а компания предоставляла услуги по разработке, то да, тогда наверное не стоит. Я подумал что это свой продукт, которые пилит компания, которым гордится и который продает.
Ну в принципе если это продукт не самой компании, а компания предоставляла услуги по разработке, то да, тогда наверное не стоит. Я подумал что это свой продукт, которые пилит компания, которым гордится и который продает.
А ты видел у врп хоть один нормальный продукт свой?)))
С managed packages и их разделением не всё так просто :-) и как обычно однозначного ответа нет. За: - отдельные лимиты для каждого namespace акромя total heap size, maximum CPU time, maximum transaction execution time и maximum number of unique namespaces
- maintainability - спорный вопрос - flexibility
Против: - maintainability - спорный вопрос - всеми "любимые" лимиты, а конкретно уже упоминавшийся - maximum number of unique namespaces, который гласит "In a single transaction, you can only reference 10 unique namespaces. For example, suppose you have an object that executes a class in a managed package when the object is updated. Then that class updates a second object, which in turn executes a different class in a different package. Even though the second package wasn’t accessed directly by the first, because it occurs in the same transaction, it’s included in the number of namespaces being accessed in a single transaction."
В общем попилили package на 10 частей - он может сделать в 10 раз больше, но вместе уже Вальтрона из них не собрать, по-крайней мере в одной транзакции.
- отдельные лимиты для каждого namespace акромя total heap size, maximum CPU time, maximum transaction execution time и maximum number of unique namespaces
Так можно сделать один глобальный класс с одним методом, который на вход будет принимать Object. А что в него пихать и как разбирать можно придумать. И не надо беспокоиться о глобальных классах вообще. На счет API штука хорошая, но если она реально нужна, а просто чтобы между пакетами общаться или внутри одного орга, то нафиг не нужно. Ну и зачем каждому клиенту открытое API? Обычно API делают где-то в одном месте, чтобы клиенты к нему обращались, а не каждый во что горазд. Ну если только свое API не будет рассматриваться как отдельная фишка. Тогда это вообще не относится к разделению пакетов.
Можно усовершенствовать идею, предложенную Дмитрием, а именно - иметь в package API класс, который будет открывать доступ куче методов из пэкаджа, и иметь механизм, который позволит сгенерировать apex code для удобной инъекции кода в target организацию, чтобы не работать с безликим методом API. Например:
//package public class A { public Object methodOne(String a, Boolean b, Integer c) { //do something } }
global class API { global Object call(String methodID, Map<String, Object> parameters) { if (methodID == ‘A.methodOne’) { return new A().methodOne((String) parameters.get(‘a’), (Boolean) parameters.get(‘b’), (Integer) parameters.get(‘c’)); } … }
global String generateApex() { return ‘public class API\n’ + ‘{\n’ + ‘private static final NS.API apiInstance = new NS.API();\n’ + ’public class A\n’ + ‘{\n’ + ‘public Object methodOne(String a, Boolean b, Integer c)\n’ + ‘{\n’ + ‘return new NS.Api().call(‘A.methodOne’, new Map<String, Object>{\n’ + ‘\’a\’ => a,\n’ + ‘\’b\’ => b,\n’ + ‘\’c\’ => c\n’ + ‘});\n’ + ’}\n’ + ’}\n’ + ‘}\n’; } }
Где NS - нэймспейс managed package. А дальше устанавливаете package, вызываете метод new NS.API.generateApex(), копируете полученный текст и создаёте класс в target организации. Код чисто для примера, но он должен дать представление о самой идее, а дальше его можно "причесать" и усовершенствовать.
Из плюсов - получаем не безликий класс API с непонятным одним методом, а вполне нормальную структурку с нормальными именами методов. Если вдруг понадобится полностью переписать package и заменить его - это будет достаточно просто сделать.
PS: Если реализуете эту идею - поделитесь результатом!
В очередной раз убеждаюсь что одна голова хорошо, а несколько лучше.
Собственно основная идея при разделении пакета была - улучшить perfomance и по возможности избавиться от лимитов. Для этого была полностью изменена внутрення структура, а именно сейчас все контроллеры и страницы общаются строго через JSON. Никаких REMOTE ACTION. Терпеть их не могу. Делать отдельнаю страницу и реализовывать механизм, что предложил GRES, тоже не хотелось. Но тогда как можно сделать раздельную загрузку частей страницы ? Правильно....через REST webservice ИЛИ через SOAP. Через SOAP уже реализовано, но это не самый удобный способ общения из JS. + ко всему пакет уже разделен и общаться он должен как-то с другими частями. Понятно что можно использовать глобальный класс, но тогда мы привязывается к версии пакета, а если используем вебсервис, то вроде как нет жесткой привязки к версии основного пакета.
Вот такие вот мысли.
Илья твоя идея, это продолжение моей идеи и очень даже логичное продолжение. Такую идею я уже реализовывал в другом проекте и она достаточно успешно работала. Я там даже делал динамическое связывание, то есть я контроллер генерил на лету и запускал его.
Я недавно попробовал Ractive.js Тоже минимальная библиотека, но жудко крутая. По мне это упрощенная копия AngularJS. С ней разработка в разы упростилась. Теперь по возможности ее использую. От AngularJS пока отказался в виду его монструозности и не очень простой инициализации. С Ractive.js инициализация в пару строк, и скорость как обещают на уровне, ну и все плюшки от Angular (которые я использовал) есть.
Можешь уточнить у него почему? Хотелось бы услышать экспертное мнение. И если не сложно, можешь спросить что он считает лучшей альтернативой? Буду признателен за информацию.
[quote="Gres"][quote="Dmitry Shnyrev"]Я недавно попробовал Ractive.js [/quote]
Знакомый UI-шик ее почему то не любит)[/quote]
Можешь уточнить у него почему?
Хотелось бы услышать экспертное мнение.
И если не сложно, можешь спросить что он считает лучшей альтернативой?
Буду признателен за информацию.
Wilder расскажи подробнее про динамическую генерацию и запуск.
[quote="Gres"][quote="Dmitry Shnyrev"]Wilder расскажи подробнее про динамическую генерацию и запуск.[/quote]
Мы же ждем! =)[/quote]
Да, да :D ждем!!!
Можешь уточнить у него почему? Хотелось бы услышать экспертное мнение. И если не сложно, можешь спросить что он считает лучшей альтернативой? Буду признателен за информацию.
Сейчас в мире ит столько фреймворков, у меня такое чувство что каждый день выходит по несколько штук.
Я их всех терпеть не могу. Потому что все они делают одно и тоже, но каждый уверен, что его фреймворк лучше. А на самом деле он точно такойже как и 100 предыдущих. Аж бесит
[quote="Dmitry Shnyrev"]Можешь уточнить у него почему?
Хотелось бы услышать экспертное мнение.
И если не сложно, можешь спросить что он считает лучшей альтернативой?
Буду признателен за информацию.[/quote]
Сейчас в мире ит столько фреймворков, у меня такое чувство что каждый день выходит по несколько штук.
Я их всех терпеть не могу. Потому что все они делают одно и тоже, но каждый уверен, что его фреймворк лучше. А на самом деле он точно такойже как и 100 предыдущих. Аж бесит
Ну каждый хочет урвать кусок пирога. А вдруг чья-то библиотека выстрелит - товарищ прославится ну или компания
[quote="Maxim Elets"]Я их всех терпеть не могу. Потому что все они делают одно и тоже, но каждый уверен, что его фреймворк лучше.[/quote]
:D сделай свой и забей на остальных :D
Расскажи подробнее, интересно.
Ну особенно нечего там рассказывать. Было это года полтора назад, холодным изральским вечером где-то в сентябре....Шутка.. В израиле в сентябре еще теплые вечера Теперь по теме.
Щас уже точно и не вспомню зачем, но было сделано следующее.
1. Есть пустой класс
public class test{ }
Так вот этот класс был привязан к какой-то странице.
По какому-то условию через standardController код класса менялся и запускалась эта самая страница.
[quote="Gres"]Расскажи подробнее, интересно.[/quote]
Ну особенно нечего там рассказывать. Было это года полтора назад, холодным изральским вечером где-то в сентябре....Шутка.. В израиле в сентябре еще теплые вечера :) Теперь по теме.
Щас уже точно и не вспомню зачем, но было сделано следующее.
1. Есть пустой класс
[code]public class test{
}[/code]
Так вот этот класс был привязан к какой-то странице.
По какому-то условию через standardController код класса менялся и запускалась эта самая страница.
вот собственно и все.
По какому-то условию через standardController код класса менялся и запускалась эта самая страница.
Мне интересно как это всё вообще работало? Код класса поменять, это не шубу в трусы запихивать, это на prod'е запускает тесты и может залипнуть на продолжительное время, так что динамичность под вопросом.
[quote="wilder"]По какому-то условию через standardController код класса менялся и запускалась эта самая страница.[/quote]
Мне интересно как это всё вообще работало? Код класса поменять, это не шубу в трусы запихивать, это на prod'е запускает тесты и может залипнуть на продолжительное время, так что динамичность под вопросом.
это на prod'е запускает тесты и может
Бо прода тот проект не дошел. Это я на сендбоксе игрался. Хотя я знаю один пакет, который и на проде так делает.
[quote="ilya leshchuk"]это на prod'е запускает тесты и может [/quote]
Бо прода тот проект не дошел. Это я на сендбоксе игрался. Хотя я знаю один пакет, который и на проде так делает.
XMLHttpRequest cannot load https://eu5.salesforce.com/services/apexrest/sourceSync/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://c.eu5.visual.force.com' is therefore not allowed access. The response had HTTP status code 401
как обычно все упирается в салесфорс. Ок. похоже пока все останется по старому, а жаль
XMLHttpRequest cannot load https://eu5.salesforce.com/services/apexrest/sourceSync/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://c.eu5.visual.force.com' is therefore not allowed access. The response had HTTP status code 401
как обычно все упирается в салесфорс. Ок. похоже пока все останется по старому, а жаль :(
CORS - тоже не прокатывает. добавил https://c.eu5.visual.force.com.
Хотя в хелпе написано, что должно [url=https://help.salesforce.com/htviewhelpdoc?err=1&id=extend_code_cors.htm&siteLang=en_US]работать[/url]
Млин, вот чем обусловлено это разделение по поддоменам для кастомного функционала в Salesforce? Ну вот абсолютно ВСЕ разработчики костылят чтобы обойти это проблему. Неужели это стоит того чтобы вызывать столько проблем?
Млин, вот чем обусловлено это разделение по поддоменам для кастомного функционала в Salesforce?
Ну вот абсолютно ВСЕ разработчики костылят чтобы обойти это проблему. Неужели это стоит того чтобы вызывать столько проблем?
Млин, вот чем обусловлено это разделение по поддоменам для кастомного функционала в Salesforce? Ну вот абсолютно ВСЕ разработчики костылят чтобы обойти это проблему. Неужели это стоит того чтобы вызывать столько проблем?
Видимо это политика. Сделать жизнь разработчика веселее и что бы все работало синхронно.
[quote="Dmitry Shnyrev"]Млин, вот чем обусловлено это разделение по поддоменам для кастомного функционала в Salesforce?
Ну вот абсолютно ВСЕ разработчики костылят чтобы обойти это проблему. Неужели это стоит того чтобы вызывать столько проблем?[/quote]
Видимо это политика. Сделать жизнь разработчика веселее :) и что бы все работало синхронно.
Нет, а если серьезно. Есть ли какой-то реальный профит от такого разделения? Может безопасность какая-то? Никто не задумывался?
:)
Нет, а если серьезно. Есть ли какой-то реальный профит от такого разделения? Может безопасность какая-то? Никто не задумывался?
:) Нет, а если серьезно. Есть ли какой-то реальный профит от такого разделения? Может безопасность какая-то? Никто не задумывался?
Безопастность да...но профит, только если не используют серьезные парни. Лично для меня запустить какой-то JS не такая уж и большая проблема.
А почему они убрали S-Control. По той же самой причине.
В нашел я в чем у них косяк....
Я обращаюсь на https://c.eu5.visual.force.com/services/apexrest/sourceSync....что делают эти черти Redirect To:https://eu5.salesforce.com/services/apexrest/sourceSync, но эти дебилки прокидывают только GET, но не POST. Чисто технически я конечно могу использовать только GET, но блин что это за кастрация такая ???
[quote="Dmitry Shnyrev"]:)
Нет, а если серьезно. Есть ли какой-то реальный профит от такого разделения? Может безопасность какая-то? Никто не задумывался?[/quote]
Безопастность да...но профит, только если не используют серьезные парни. Лично для меня запустить какой-то JS не такая уж и большая проблема.
А почему они убрали S-Control. По той же самой причине.
В нашел я в чем у них косяк....
Я обращаюсь на https://c.eu5.visual.force.com/services/apexrest/sourceSync....что делают эти черти
Redirect To:https://eu5.salesforce.com/services/apexrest/sourceSync, но эти дебилки прокидывают только GET, но не POST. Чисто технически я конечно могу использовать только GET, но блин что это за кастрация такая ???
В общем внедрение фреймворков процесс не быстрый, но зато результат радует. Скорость однозначно возрасла. Ушла куча геморроя, верстка просто песня. И главное в любой момент можно сделать экспорт данных почти из любого места.
В общем внедрение фреймворков процесс не быстрый, но зато результат радует. Скорость однозначно возрасла. Ушла куча геморроя, верстка просто песня. И главное в любой момент можно сделать экспорт данных почти из любого места.
Я про jQuery и его плагины. Кстати похоже салесфорс тоже использует его только не напрямую. Загрузите стандартный лайаут и в консоли посмотрите что выдает $.
[quote="Dmitry Shnyrev"]Ты про какой фреймворк?[/quote]
Я про jQuery и его плагины. Кстати похоже салесфорс тоже использует его только не напрямую. Загрузите стандартный лайаут и в консоли посмотрите что выдает $.
Да какой jQuery фреймворк - просто библиотека с набором функций. И внедрять его не сильно сложно - подключил и дергай функции. Вот попробуй внедрить какой-нибудь реальный js framework (Angular, Backbone, Ember) вот тут реально будет вывих мозга. Именно вывих мозга, потому что придется думать совсем по другому - не DOM + js а настоящий MVC в браузере.
Да какой jQuery фреймворк - просто библиотека с набором функций. И внедрять его не сильно сложно - подключил и дергай функции.
Вот попробуй внедрить какой-нибудь реальный js framework (Angular, Backbone, Ember) вот тут реально будет вывих мозга. Именно вывих мозга, потому что придется думать совсем по другому - не DOM + js а настоящий MVC в браузере.