Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Что не так в моем коде, и как подтянуть навыки?

#android #java


Отправил тестовое задание на позицию Android разработчика, но в ответ они написали:

После ознакомления с тестовым заданием, мы отметили, что у вас недостаточный уровень
знания принципов ООП и принципов построенийAndroid-приложений.
Если вы подтянете свой уровень знаний, лучше изучите ООП и каким образом применять
его принципы для построения приложений, то мы могли бы вернуться к вопросу рассмотрения
вашей кандидатуры в будущем.

Я самоучка, учился по книгам, статьям и т.д. , можете опытным глазом посмотреть что
в моем коде не так в плане ООП и принципов построения? И как апргрейдить эти навыки? 
Код на gitHub, т.к. классов не один и не два https://github.com/Vlad161/Products    


Ответы

Ответ 1



Ответ работодателя очень похож на стандартную отписку, поэтому не стоит воспринимать его буквально. После просмотра вашего проекта (кстати, неплохо было бы написать, что именно от вас хотели, можно выдержку из тестового задания) остались такие замечания: Имена классов. Обычно имена классов - существительные (JSONReadFromAsset стоило бы назвать JSONAssetReader). К тому же стоит придерживаться какого-то общего стиля именования (два класса-активити заканчиваются на Activity, третий почему-то нет). Скорее всего от вас ждали минимальной реализации MVC. Стоило создать bean для хранения сведений о продукте и добавить уровень абстракции DAO для извлечения данных из файла. Как-то так: public interface ProductDAO { List getProducts(); } public class ProductDaoImpl implements ProductDAO { public List getProducts() { // здесь вытаскиваем список продуктов из JSON } } Таким образом вы бы отделили реализацию получения данных от логики их обработки, получив возможность изменять способ получения данных, не затрагивая основную логику программы. Насчёт "подтянуть навыки ООП" - читайте Head First Design Patterns и GOF.

Ответ 2



Вполне нормально написано, действительно похоже на отписку. Я бы немного погундел на: Постоянное использование литеральных констант, которые имеет смысл объявить как final static String ID="id"; ну и т.д. Злоупотребление анонимными классами обработчиков - ухудшает читаемость; Не совсем единообразный стиль именования (naming convention); Отсутствие бина Product, это бы существенно упростили бы код - например даже отсылка через Intent extras, ну не говоря о прочих вкусностях - наверное это самое серьезный недостаток вашего кода; Отсутствие типизированных исключений; Возможно имело бы смысл использовать стороннюю либу для парсинга Json массива (типа Google GSON) - ну типа показали бы что умеете работать со сторонними либами, а не каждый раз изобретаете велосипед. А так вполне нормально. Для начинающего вполне тянет на "четверочку". Update Да, еще из существенного: вам надо "посадить" читалку Json массива в IntentService или в Runnable с извещением об окончании работы через Broadcast. А на отображение продукта поставить "ожидалку" ждущую кастомный приватный Broadcast от читателя Json массива. В противном случае, если придется читать Json из сети - у вас код будет нерабочий.

Ответ 3



Суть претензии в отсутствии ООП вполне ясна: У Вас просто нету прикладной модели. Из Вашего кода невозможно выделить целостные объекты (продукт, список продуктов и т.д.) и их способы взаимодействия. Например, для данной задачи (как я её понимаю без самого описание задачи) я бы выделил следующие объекты: Product //класс содержащий всю информацию о продукте и возможные действия над ним(ид, имя, продать, купить....) ProductCollection //Класс содержащий набор продуктов и операции над этим набором (добавить, удалить, загрузить из адаптера ProductAdapter //Базовый класс который предоставляет методы по получению продуктов из источников данных И далее развивать эти классы, чтобы показать возможности инкапсуляции, наследования и прочих возможностей ООП. Например адаптер - сделать интерфейсом.

Комментариев нет:

Отправить комментарий