Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

wintersun1993 avatar wintersun1993 114 Точки

[Technical Issue] - Какво е и как се използва Wrap

Здравейте!Възможно ли е някой по-напреднал в програмирането да ми обясни понятието Wrap във всичките му контексти?Запознат съм с Word Wrap и разбирам целта му да пренася текста на нов ред всеки път като стигне определена дължина.Интересуват ме всички останали значения, за които чета и ми е трудно да разбера какво правят, каква е ползата от тях, и как могат да бъдат реализирани.

Пример: "You can have a wrapper library, that is, a library that 'translates' another library's functions into easier to use ones."

Тагове:
0
Java Advanced
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Това е начин, по който придаваш функционалност на приложението си, зависеща от външна библиотека и/или нестабилна или динамична такава.

 

Представи си, че аз ти предоставям библиотеката за правене на PDF-и от Java. И методът, който го прави се казва exportToPdf(). Сега си представи, че ти в твоето приложение на около 400 места имаш правене на PDF. Т.е. на около 400 места имаш document.exportToPdf(). Също така, най-вероятно, имаш още 4-5 реда кода преди това, в който си създаваш документа, задаваш път, размери, етс. Т.е. 4 реда код по 400 места - 1600. Сега, аз тази библиотека дето съм ти я предостафил, решавам да я сваля от ефир.

 

И много кофти, защото твоите PDF-и спират да се експортват по случая. Ти обаче си намираш друга библиотека, която използва 3 метода, като главния е createPdf(). Сега задачата ти е да обиколиш целия си апликейшън и да промениш тези 1600 реда код по новия начин.

 

Тук идва момента на wrap-ването.

 

Прави си един твой клас, да речем Pdf. В него правиш един метод export().

Псевдокод:

 

public class Pdf {

    MyPdfLib pdf;

    public Pdf(String name, int[] margins) {

         this.pdf = new MyPdfLib(name);

         pdf.setWidth(margins[0]);

    }

 

    public void export() {

        this.pdf.exportToPdf();

    }

}

 

И където ти се налага в апликейшъна да експортваш към PDF, цялата схема е Pdf('MyPdfName.pdf', {10, 10}).export(); В момента, в който аз сваля библиотеката си (MyPdfLib) от ефир, ти отиваш в този твоя клас Pdf, сменяш да не ползва MyPdfLib а да ползва SomeoneElsePdfLib. Настройваш методите, които ползва за инициализация и си готов - останалия ти код в апликейшъна продължава да ползва Pdf.export()

 

----

 

Wrap-ване се ползва в доста Design patterns, като най-известно е може би са Proxy и Facade pattern-ите. В тях разбира се, освен семпло обвиване на функции, е застъпено и доста силно обектно ориентираното програмиране.

 

С тях трябва добре да се обимсли как точно се прави wrapping-а, за да не се постигне т.нар. tight coupling между класовете, който според мен е възможен в примера в уики с Фасадата. Тук вече е въпрос на дизайн и добра архитектура как ще бъдат подадени обектите на фасадата. Според мен има оправдани случаи, в които е хубаво инициализацията на фасада да става през Dependency injection container.

 

       

 

4
wintersun1993 avatar wintersun1993 114 Точки

Благодаря ти!Излиза, че е доста полезно когато става на въпрос за големи проекти.Примера, който даде също беше доста пояснителен.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Моят личен съвет е да не пропускаш подобни неща и за малки проекти, така ще си създадеш навик :) Разбира се като всяко друго хубаво нещо, не трябва да се прекалява, т.е. да wrap-ваш и най-малките частици неща е безсмислено, все едно си пишеш твой език. По принцип съм го виждал в света на РНР, където системни библиотеки се махат и слагат от една версия на друга, и хората не вярват в това, че днес щом съществува функция X() утре ще я има пак. Но за външните сорсове е задължително според мен :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.