Ìíîãèå ïðîåêòû ËÅÄÀÑ ïî ñâîåé ñóòè ÿâëÿþòñÿ ðàçðàáîòêîé ïîäêëþ÷àåìûõ ìîäóëåé (ïëàãèíîâ) äëÿ ïðîãðàìì ÑÀÏÐ, íà÷èíàÿ îò ìîùíûõ ñèñòåì, òàêèõ êàê CATIA, è çàêàí÷èâàÿ áîëåå ëåãêèìè ðåøåíèÿìè, òàêèìè êàê Rhino. ×àñòî ìû ïîìîãàåì íàøèì êëèåíòàì ðåøèòü, â êàêîé ôîðìå ëó÷øå âñåãî âîïëîùàòü èõ èäåè: â âèäå ïëàãèíà èëè êàê îòäåëüíóþ ïðîãðàììó.
 ýòîì ïîñòå ÿ õî÷ó ïîäåëèòüñÿ ñâîèìè ñîîáðàæåíèÿìè î òîì, ïî÷åìó è êîãäà ðàçðàáîòêà ïëàãèíîâ ÿâëÿåòñÿ áîëåå óìåñòíûì ïîäõîäîì ïî ñðàâíåíèþ ñ ñîçäàíèåì ïðèëîæåíèÿ ñ íóëÿ. ß òàêæå ðàññêàæó î ôîðìàõ ïîäêëþ÷àåìûõ ìîäóëåé, êîòîðûå ìîæíî èñïîëüçîâàòü â òåõ èëè èíûõ ñèòóàöèÿõ. È îáðàòèòå, ïîæàëóéñòà, âàøå âíèìàíèå íà íàø îïûò ðàçðàáîòêè ïëàãèíîâ äëÿ ÑÀÏÐ.
Ïëþñû è ìèíóñû ïëàãèíîâ
Ïëàãèíû ñîçäàþòñÿ äëÿ ðåøåíèÿ îïðåäåëåííûõ çàäà÷ èëè äîáàâëåíèÿ ôóíêöèé, îòñóòñòâóþùèõ â ñèñòåìàõ ÑÀÏÐ. Õîðîøèì ïðèìåðîì ÿâëÿåòñÿ CAMWorks îò HCL – ðàñøèðåííûé ïëàãèí, êîòîðûé äîáàâëÿåò ôóíêöèè àâòîìàòèçèðîâàííîãî ïðîèçâîäñòâà (CAM) â ñèñòåìó ïðîåêòèðîâàíèÿ SolidWorks.
Ñðàâíèâàÿ ïîäêëþ÷àåìûå ìîäóëè è íåçàâèñèìûå ïðèëîæåíèÿ, ìû ïðèøëè ê âûâîäó, ÷òî äëÿ ïðîãðàììíîãî îáåñïå÷åíèÿ, èñïîëüçóåìîãî èíæåíåðàìè-ðàçðàáîò÷èêàìè âíóòðè êîìïàíèè ñ öåëüþ îáëåã÷åíèÿ èõ ïîâñåäíåâíîé ðàáîòû, ëó÷øå ïîäõîäÿò ïëàãèíû.  íåêîòîðûõ ñëó÷àÿõ èñïîëüçîâàíèå ïëàãèíîâ çíà÷èòåëüíî ñíèæàåò ñòîèìîñòü ðàçðàáîòêè. Ãîòîâûå ñèñòåìû ÑÀÏÐ ðàáîòàþò ñ ïëàãèíàìè ÷åðåç ñâîè API.
Íåäîñòàòîê ïëàãèíîâ â òîì, ÷òî îíè çàâèñÿò îò îñíîâíîãî ïðèëîæåíèÿ: ÷òîáû èñïîëüçîâàòü ïëàãèí, íåîáõîäèìî ïðèîáðåñòè ëèöåíçèþ, à òàêæå âûïîëíèòü óñòàíîâêó ïðîãðàììíîãî îáåñïå÷åíèÿ, íà áàçå êîòîðîãî íàïèñàí ïëàãèí. Ïðè ýòîì èñïîëüçîâàíèå ïëàãèíà áóäåò îãðàíè÷åíî êîëè÷åñòâîì ðàáî÷èõ ìåñò â öåëåâîé ÑÀÏÐ.
Ïîýòîìó îáû÷íî íàøè çàêàç÷èêè ðåäêî çàäóìûâàþòñÿ î ñîçäàíèè êîíå÷íî-ïîëüçîâàòåëüñêèõ ïðîäóêòîâ â ôîðìå ïëàãèíîâ. Îáû÷íî òàêèå ïðîäóêòû ñîçäàþòñÿ êàê äåñêòîïíûå ïðèëîæåíèÿ, à â ïîñëåäíèå ãîäû âñå ÷àùå â âèäå êëèåíò-ñåðâåðíûõ âåá-ïðèëîæåíèé.
Ïëþñû è ìèíóñû àâòîíîìíûõ ïðèëîæåíèé
Ðàññìàòðèâàÿ ðàçðàáîòêó äåñêòîïíîãî èëè âåá-ïðèëîæåíèÿ, ñëåäóåò ó÷èòûâàòü, ÷òî òàêîìó ïðèëîæåíèþ ïîòðåáóåòñÿ ãåîìåòðè÷åñêîå ÿäðî, ñ ïîìîùüþ êîòîðîãî îíî áóäåò êîíñòðóèðîâàòü, ïðåäñòàâëÿòü è òåññåëèðîâàòü 3D îáúåêòû. (Áîëüøå óçíàòü î ãåîìåòðè÷åñêèõ ÿäðàõ âû ìîæåòå íà ñòðàíèöå ñàéòà ËÅÄÀÑà, ïîñâÿùåííîé 3D-ìîäåëèðîâàíèþ.) Ãîäîâàÿ ñòîèìîñòü ëèöåíçèè íà ïîäïèñêó íà ÿäðî îáû÷íî çíà÷èòåëüíî âûøå, ÷åì åäèíîâðåìåííûé ïëàòåæ çà îäíó ëèöåíçèþ íà ÑÀÏÐ ëåãêîãî èëè ñðåäíåãî êëàññà, ê êîòîðîé áóäåò ïîäêëþ÷àòüñÿ ïëàãèí.
Åùå îäíèì èñòî÷íèêîì çàòðàò ÿâëÿþòñÿ óñèëèÿ ïî ðåàëèçàöèè 3D ñöåí: âèçóàëèçàöèÿ, ìàíèïóëèðîâàíèå êàìåðîé (ìàñøòàáèðîâàíèå, ïàíîðàìèðîâàíèå, ïîâîðîò) è ìàíèïóëèðîâàíèå îáúåêòàìè (âûäåëåíèå, ïåðåìåùåíèå è ò. ä.). Ïëàãèíó âñå ýòè ôóíêöèè ãëàâíîå ïðèëîæåíèå ïðåäîñòàâëÿåò ÷åðåç ñâîé API; â ñëó÷àå àâòîíîìíûõ ïðèëîæåíèé îíè äîëæíû áûòü çàïðîãðàììèðîâàíû íà íèçêîì óðîâíå èëè ñ ïîìîùüþ ëèöåíçèðîâàííîãî êîìïîíåíòà âèçóàëèçàöèè.
Òèïû ðåøåíèé, îñíîâàííûõ íà èñïîëüçîâàíèè ïëàãèíîâ
API, ïðåäîñòàâëÿåìûå ñèñòåìàìè ÑÀÏÐ, îáû÷íî ïðåäïîëàãàåòñÿ èñïîëüçîâàòü äëÿ ðàñøèðåíèÿ è àäàïòàöèè ôóíêöèé ñàìîé ñèñòåìû, à íå äëÿ ñîçäàíèÿ ïîëüçîâàòåëüñêèõ ïðîöåññîâ äëÿ ðåøåíèÿ êîíêðåòíûõ çàäà÷. Êðîìå òîãî, áûâàåò íå âñåãäà ëåãêî ñîçäàòü ñïåöèàëèçèðîâàííûé ïëàãèí, êîòîðûé ïåðåîïðåäåëÿåò ïîëüçîâàòåëüñêèé èíòåðôåéñ õîñò-ïðèëîæåíèÿ è ïîäìåíÿåò åãî ðàáî÷èé ïîòîê ñâîèì ñîáñòâåííûì.
Ïî íàøåìó îïûòó, Rhino – îòëè÷íûé ïðèìåð òàêîé ñèñòåìû. Îí ïîçâîëÿåò ñêðûòü áîëüøèíñòâî åãî ïàíåëåé è ïàíåëåé èíñòðóìåíòîâ ïî óìîë÷àíèþ è çàìåíèòü èõ íàøèìè ñîáñòâåííûìè ïàíåëÿìè, êîòîðûå ìîæíî ëåãêî ñîçäàòü ñ ïîìîùüþ WPF (Windows Presentation Foundation). Ýòî äàåò íàì ïî÷òè òàêîé æå óðîâåíü êîíòðîëÿ íàä ïîëüçîâàòåëüñêèì èíòåðôåéñîì Rhino, êàê è â íåçàâèñèìûõ WPF ïðèëîæåíèÿõ.
Ïðèìåð îêíà è ïàíåëè èíñòðóìåíòîâ, äîáàâëåííûõ â Rhino ñ ïîìîùüþ ïëàãèíà
 äðóãèõ ñèñòåìàõ ÑÀÏÐ èñïîëüçîâàíèå òàêîãî ïîäõîäà ìîæåò îêàçàòüñÿ ïðîáëåìàòè÷íûì, ïîñêîëüêó â íèõ ìîãóò èñïîëüçîâàòüñÿ óñòàðåâøèå ãðàôè÷åñêèå èíòåðôåéñû ïîëüçîâàòåëÿ (âû ñëûøàëè, íàïðèìåð, î WxWidgets?) èëè îãðàíè÷åííûé íàáîð ïðåäîïðåäåëåííûõ ýëåìåíòîâ óïðàâëåíèÿ.
Îäíàêî, åñëè ó ïðèëîæåíèÿ åñòü âíåøíèé API, êîòîðûé ìîæåò áûòü âûçâàí èç äðóãîãî ïðîöåññà, íàïðèìåð ÷åðåç COM èëè WCF, ìû ìîæåì ñîçäàòü ïîëüçîâàòåëüñêèé èíòåðôåéñ ïëàãèíà êàê âíåøíåå ïðèëîæåíèå, êîòîðîå âçàèìîäåéñòâóåò ñ ãëàâíîé ÑÀÏÐ-ñèñòåìîé ÷åðåç API. Òåõíè÷åñêè ýòî óæå íå ñîâñåì ïëàãèí. Ýòî ïîçâîëÿåò íàì ñîçäàâàòü ïîëüçîâàòåëüñêèé èíòåðôåéñ ñ èñïîëüçîâàíèåì ñîâðåìåííûõ òåõíîëîãèé, ìàêñèìàëüíî õîðîøî ñîîòâåòñòâóþùèõ ñïåöèôè÷åñêèì òðåáîâàíèÿì, è ïðè ýòîì ïîëàãàòüñÿ íà ãåîìåòðè÷åñêîå ÿäðî è âîçìîæíîñòè 3D ñöåíû îñíîâíîãî ÑÀÏÐ-ïðèëîæåíèÿ. Ýòîò ïîäõîä äîâîëüíî ïîïóëÿðåí, õîòÿ è ÿâëÿåòñÿ íåñêîëüêî áîëåå ñëîæíûì.
Êàê ïðèíÿòü ðåøåíèå
Òàêèì îáðàçîì, êðèòåðèåì ïðè âûáîðå ìåæäó ïëàãèíîì è îòäåëüíûì ïðèëîæåíèåì ìîæåò ñëóæèòü îöåíêà ÷èñëà ïîëüçîâàòåëåé: åñëè îáùàÿ ñòîèìîñòü êîïèé ãëàâíîé ÑÀÏÐ íå ïðåâûøàåò ñòîèìîñòè ïîëüçîâàòåëüñêîãî ïðèëîæåíèÿ (ñ ëèöåíçèÿìè íà ãåîìåòðè÷åñêîå ÿäðî è êîìïîíåíòû âèçóàëèçàöèè è çàòðàòàìè íà ðåàëèçàöèþ 3D ñöåíû), òî ïëàãèí ÿâëÿåòñÿ áîëåå äåøåâûì âàðèàíòîì.
Ñòîèò îòìåòèòü, ÷òî èíîãäà ñòîèìîñòü ëèöåíçèðîâàíèÿ õîñò-ïðèëîæåíèÿ ìîæåò ñ÷èòàòüñÿ íóëåâîé, ïîñêîëüêó èíæåíåðû êîìïàíèè óæå èñïîëüçóþò ýòî ïðîãðàììíîå îáåñïå÷åíèå â ñâîèõ ïðîöåññàõ.  ýòîì ñëó÷àå ïëàãèí, ïîäêëþ÷àåìûé ê òàêîé ñèñòåìå, îáëàäàåò äîïîëíèòåëüíûì ïðåèìóùåñòâîì, ïîñêîëüêó îí âñòðàèâàåòñÿ â ïðèâû÷íóþ ðàáî÷óþ ñðåäó.
Îñíîâûâàÿñü íà íàøåì îïûòå, ìû ìîæåì ñêàçàòü, ÷òî ïëàãèíû äîâîëüíî ïîïóëÿðíû äëÿ ïîëóàâòîìàòèçàöèè îïðåäåëåííûõ ÑÀÏÐ-ïðîöåññîâ, âûïîëíÿåìûõ íåáîëüøîé ãðóïïîé èíæåíåðîâ èëè æå áîëüøîé ãðóïïîé, óæå èñïîëüçóþùåé ïîäõîäÿùóþ ÑÀÏÐ. Ê ïðèìåðó, ìíîãèå èç íàøèõ ïðîåêòîâ öèôðîâîé ìåäèöèíû èìåþò ôîðìó ïëàãèíîâ.
Çàêëþ÷åíèå
 öåëîì ïðè ðàçðàáîòêå âíóòðåííèõ ïðèëîæåíèé â îðãàíèçàöèÿõ, ñîòðóäíèêè êîòîðûõ óæå èñïîëüçóþò îïðåäåëåííóþ ÑÀÏÐ, ñëåäóåò îòäàâàòü ïðåäïî÷òåíèå ïëàãèíàì. Ýòî çíà÷èòåëüíî ñíèæàåò ñòîèìîñòü ðàçðàáîòêè, ïîñêîëüêó íåò íåîáõîäèìîñòè ïëàòèòü çà ëèöåíçèè îñíîâíîãî ïðîãðàììíîãî îáåñïå÷åíèÿ.