Есть ли способ в Salesforce группировать классы apex под пакетом или пространством имен? Можем ли мы использовать управляемый пакет для внутренней организации?
Организация классов Apex в пространстве имен
Ответ 1
Это ограничение в стеке force.com, который делает проекты с большим размером большого размера болезненными, если не непрактичными. Использование управляемых пакетов для получения префикса пакета на самом деле не решает никаких проблем, поэтому это не стоит того.
Обычно я пытаюсь организовать проект на один ровный уровень пространства имен. Вместо фактических пространств имен я дам каждому будущему пространству имен имя 3-5 символов, которое будет использоваться в качестве префикса. Любой класс, принадлежащий "пространству имен", имеет префикс. Например, если мне нужно пространство имен payroll
, я бы использовал префикс PYRL
. Класс, называемый PaycheckCalculator
, становится PYRL_PaycheckCalculator
.
Практическое преимущество этого типа соглашения заключается в том, что оно помогает предотвратить столкновения имен и классы, сгруппированные по их "пространству имен" при просмотре в отсортированном списке, например в среде IDE, или в разделе "Настройкa > Развить > Apex Classes
К сожалению, некоторые основные принципы OO по-прежнему принципиально нарушены. Вероятно, самый важный из них - это каждый класс, который подразумевает неявную зависимость от каждого другого класса, к которому он имеет видимость, который все из них.
Мне бы хотелось услышать, как другие работали над этим ограничением.
Ответ 2
Ну, вы можете использовать управляемые пакеты, но, как сказал Джереми, вы действительно не покупаете вас. Конечно, управляемые пакеты необходимы для разработки публично перечисленных приложений для продажи на AppExchange. Но внутренне это действительно общая проблема, поскольку с момента создания управляемого пакета с префиксом все, что касается любой другой части, получает печать с тем же префиксом пространства имен, включая все пользовательские объекты. И что еще хуже, вы не можете получить доступ к коду в управляемом пакете из-за пределов управляемого пакета (на самом деле это в первую очередь их суть).
Несмотря на то, что это не самое приятное решение, я лично поддерживаю многочисленные именованные организации с различными целями, приложениями и служебными классами. Когда мне нужен класс утилиты в одной организации, скажем, я создаю новое приложение, предназначенное для AppExchange, я сделаю Eclipse Export/Import из рассматриваемой утилиты. Это определенно кажется странным, но наличие библиотеки орков - лучший способ, которым мне удалось отслеживать все и управлять "внутренней" организацией. Но конечный результат - это просто прославленная операция копирования-вставки между произвольными хранилищами кода.
Ответ 3
Я столкнулся с подобными проблемами, работая над большими проектами, когда-то писал этот пост в блоге, чтобы поделиться тем, как я следую сейчас: http://www.tgerm.com/2011/11/apex-class-naming-convention-suggestion.html