2015-03-06 4 views
7

Я изучал некоторые уроки, касающиеся языка Java. Мне было интересно, следует ли мне аббревиатуру каждый раз, когда я что-то кодирую, и на любой тип стандарта и стек?Абстракция с Java в Android

Я видел, что с каждыми пружинными услугами, например, мы могли бы даже абстрактные контроллеры, используя интерфейсы с EJBs на JavaEE стеки и т.д.

Я задавался вопрос, что является целью этого? Должен ли я делать то же самое при разработке с Android SDK?

Должен ли я абстрагироваться от каждого класса, который я кодирую?

+0

Если вы строите что-либо новое, то корень должен быть интерфейсом или меньше, вы можете использовать абстрактный класс. – Prashant

ответ

5

Всегда полезно сделать модульный, многоразовый компонентов. Когда приложение построено с нуля с учетом этого, становится все больше и больше масштабируемым, все больше и больше самораспространяющийся. Те же компоненты в приложении снова используются при добавлении новых функций, что экономит время и силы. И становится легче вносить изменения позже или идентифицировать источники ошибок. Рефакторинг никогда не должен быть потом, но с самого начала.

Сказав это, это не прекрасная идея иметь все больше абстракций в мобильных приложениях только ради «абстракции». Разумеется, причина в том, что смартфоны не так сильны, как серверы или даже настольные компьютеры. Существует штраф производительности, связанный с буквально каждым классом и виртуальным методом в приложении для Android. Должен быть больший баланс между «абстракцией» и эффективностью, а компромиссы производительности становятся более заметными на средних и младших устройствах.

Из официальных документов:

1.Be careful with code abstractions

2.Avoid dependency injection frameworks

3.Avoid Creating Unnecessary Objects

4.Prefer Static Over Virtual

5.Avoid Internal Getters/Setters

РЕДАКТИРОВАТЬ:

После недавнего опроса Dagger, я должен признать, что точка 2 может быть немного устаревшей. Что я могу сказать ... Я довольно поздно пришел к партии кинжалов.

2

Вам нужна абстракция всякий раз, когда у вас есть класс, который вы не хотите применять всеми его методами. Те классы, наследующие его, будут вынуждены реализовать все эти методы, иначе вам нужно было бы объявить подклассы как абстрактные.

В дополнение к этому вы должны знать интерфейс, методы интерфейса не должны иметь тела, и хорошо, что ваш класс может реализовать столько, сколько вам нужно. Принимая во внимание, что вы можете наследовать только один абстрактный класс. Интерфейсы подобны контрактам. Какой бы класс не выполнял их, они должны обеспечить тело для всех своих методов.

Независимо от того, нужен ли вам абстрактный или интерфейс, или оба они действительно зависят от вашего дизайна и того, что вы хотите реализовать. Хотя это хорошая практика, чтобы заставить те классы, которые имеют общие методы для реализации одного и того же интерфейса (если вы ничего не знаете о теле каждого из методов) или абстрактном (если вы знаете, что тело какого-то, все или никого из методы)

Другим примером может быть, когда у вас есть абстракция или интерфейс, если вы добавляете что-то к ним, все подклассы или классы, которые им реализуют, должны следовать этим изменениям, это означает, что было бы легче получить изменения.

Посмотрите на this, this и this и open/close principle также.

1

Это можно интерпретировать по-разному. С моей точки зрения, абстракция используется в кодировании как принцип проектирования, в случаях, когда вам требуется расширение или множество типов реализаций. Например, весной контроллер может быть определен как абстрактный класс (A) и иметь несколько других типов контроллеров (B, C, D ..), расширяющих A. В качестве пользователя рамки Spring, если вы не удовлетворены доступные реализации контроллера, вы все же можете разработать свой собственный контроллер, расширяющий A. Кроме того, разработчики Spring также могут легко расширять/добавлять новые контроллеры в будущих версиях.

Смежные вопросы