powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Покритикуйте код
19 сообщений из 19, страница 1 из 1
Покритикуйте код
    #38433517
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал тестовое задание - записная книжка. Функциональность приложения: добавлять новый контакт, удалять контакт, искать контакт по имени и просматривать все контакты. Запись контакта должна содержать имя, номер телефона, имейл. Я добавил ещё добавление имейла и телефона к существующему контакту. Данные сохраняются в XML. Ответили отказом :-(
Покритикуйте, пожалуйста, код, что нужно в нем изменить, чтоб улучшить?

меню программы:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
package notebook3;
public class Notebook3 implements Data {

    public static void main(String[] args) throws IOException, ParserConfigurationException, TransformerException {

        File file = new File(FILE_NAME);
        if (!file.exists()) {
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document xml_doc = docBuilder.newDocument();
            Element rootElement = xml_doc.createElement("notebook");
            xml_doc.appendChild(rootElement);
            XmlUtil.TransformFactory(xml_doc);
        }


        String menu = "\n<-- Press: -->\n1 - to add Contact\n2 - to display all contacts\n3 - to find Contact by name\n4 - add e-mail to contact\n5 - add phone to contact\n6 - to remove contact\n7 - exit\n";

        System.out.println(menu);

        Scanner input = new Scanner(System.in);
        String command = "";
        String error = "";
        Helper helper = new Helper();

        while (!(command = input.nextLine()).equals("7")) {
            try {
                switch (command) {
                    case "1": {
                        error = "";
                        System.out.print("Enter contact name: ");
                        String name = input.nextLine();
                        System.out.print("Enter phone number: ");
                        int phoneNumber = input.nextInt();
                        input.nextLine();
                        System.out.print("Enter e-mail: ");
                        String email = input.nextLine();
                        Contact contact = new Contact(new Name(name), new PhoneNumber(phoneNumber), new Email(email));
                        helper.addContactToXml(contact);
                        System.out.println("Note " + name + " was created..");
                    }
                    break;
                    case "2": {
                        error = "";
                        String result = helper.displayAllContacts();
                        System.out.println(result);
                    }
                    break;
                    case "3": {
                        error = "";
                        System.out.print("Enter contact name: ");
                        String name = input.nextLine();
                        String result = helper.findContactByName(name);
                        System.out.println(result);
                    }
                    break;
                    case "4": {
                        error = "";
                        System.out.print("Enter contact name: ");
                        String name = input.nextLine();
                        System.out.print("Enter e-mail: ");
                        String email = input.nextLine();
                        Contact contact = new Contact(new Name(name), new Email(email));
                        helper.addEmailToContact(contact);
                        System.out.print("e-mail added to " + name);
                    }
                    break;
                    case "5": {
                        error = "";
                        System.out.print("Enter contact name: ");
                        String name = input.nextLine();
                        System.out.print("Enter phone number: ");
                        int phoneNumber = input.nextInt();
                        Contact contact = new Contact(new Name(name), new PhoneNumber(phoneNumber));
                        helper.addPhoneNumberToContact(contact);
                        input.nextLine();
                        System.out.print("phone added to " + name);
                    }
                    break;
                    case "6": {
                        error = "";
                        System.out.print("Enter contact name: ");
                        String name = input.nextLine();
                        helper.removeContact(name);
                        System.out.println("contact " + name + " removed");
                    }
                    break;
                    case "7": {
                        error = "";
                    }
                    break;
                    default:
                        error = "Your command is not valid..";
                        break;
                }
            } catch (Exception e) {
                System.out.println("Error occured.. Please, try again..");
            }
            System.out.println(error + "" + menu);
        };

        System.out.println("\nExit..");

    }
}



Создаются объекты Contact, которые потом добавляются в XML:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
package logic;
public class Contact {

    private Name name;
    private PhoneNumber phoneNumber;
    private Email email;
    
    /**
     * Class constructor Contact allows to create object Contact for create 
     * a new note in Notebook.xml
     * @param name contact name
     * @param phoneNumber contact number of telephone
     * @param email contact e-mail
     */
    public Contact(Name name, PhoneNumber phoneNumber, Email email) {
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.email = email;
    }

    /**
     * Class constructor Contact allows to add a new telephone number to exist contact
     * @param name contact name
     * @param phoneNumber contact number of telephone
     */
    public Contact(Name name, PhoneNumber phoneNumber) {
        this.name = name;
        this.phoneNumber = phoneNumber;
    }

    /**
     * Class constructor Contact allows to add a new e-mail to exist contact
     * @param name contact name
     * @param email contact e-mail
     */
    public Contact(Name name, Email email) {
        this.name = name;
        this.email = email;
    }
    public Name getName() {
        return name;
    }
    public void setName(Name name) {
        this.name = name;
    }
 
    public PhoneNumber getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(PhoneNumber phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
    public Email getEmail() {
        return email;
    }
    public void setEmail(Email email) {
        this.email = email;
    }
}




Интерфейс содержит название файла:
Код: java
1.
2.
3.
4.
package logic;
public interface Data {
    public static final String FILE_NAME = "Notebook.xml";
}



Классы Email, Name и PhoneNumber при помощи композиции объединяются в классе Contact для создания нового объекта-записи (я решил так будет лучше, если нужно будет добавить ещё адрес, к примеру, то просто создается отдельный новый класс Adress и включается потом в класс Contact):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
package logic;
public class Email {
    private String email;

    public Email(String email) {
        this.email = email;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
package logic;
public class Name {

    private String name;

    public Name(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package logic;

public class PhoneNumber {
    private int phoneNumber;

    public PhoneNumber(int phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public int getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(int phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}



Класс Helper, который работает с XML:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
package logic;

public class Helper implements Data {
    private Document doc;
    private Element name, phone, email;   
    private NodeList contacts, contactFields, names;
    private Node contact;
 
    /**
     * This method adds a new contact to the XML-document
     * @param contact name of contact, witch necessary to add
     */
    public void addContactToXml(Contact contact) throws ParserConfigurationException, IOException, SAXException, TransformerException {

        doc = XmlUtil.getDocument();
        
        Node notebook = doc.getFirstChild();
        Element newContact = doc.createElement("contact");
        notebook.appendChild(newContact);
        name = doc.createElement("name");
        phone = doc.createElement("phone");
        email = doc.createElement("email");
        newContact.appendChild(name);
        newContact.appendChild(phone);
        newContact.appendChild(email);
        name.appendChild(doc.createTextNode(contact.getName().getName()));
        phone.appendChild(doc.createTextNode(String.valueOf(contact.getPhoneNumber().getPhoneNumber())));
        email.appendChild(doc.createTextNode(contact.getEmail().getEmail()));

        XmlUtil.TransformFactory(doc);
    }
    
    /**
     * This method adds the email to an existing contact
     * @param c contact, which necessary to add a new e-mail
     */
    public void addEmailToContact(Contact c) throws TransformerException, ParserConfigurationException, SAXException, IOException {

        doc = XmlUtil.getDocument();
        contacts = doc.getElementsByTagName("contact");
        for (int i = 0; i < contacts.getLength(); i++) {
            contact = doc.getElementsByTagName("contact").item(i);
            contactFields = contact.getChildNodes();

            for (int j = 0; j < contactFields.getLength(); j++) {
                if ((c.getName().getName()).equalsIgnoreCase(contactFields.item(j).getTextContent())) {
                    email = doc.createElement("email");
                    contact.appendChild(email);
                    email.appendChild(doc.createTextNode(c.getEmail().getEmail()));
                }
            }
        }

        XmlUtil.TransformFactory(doc);
    }
    
    /**
     * This method adds the phone number to an existing contact
     * @param c contact, which necessary add a new number of phone
     */
    public void addPhoneNumberToContact(Contact c) throws ParserConfigurationException, SAXException, IOException, TransformerException {
        doc = XmlUtil.getDocument();

        contacts = doc.getElementsByTagName("contact");
        for (int i = 0; i < contacts.getLength(); i++) {
            contact = doc.getElementsByTagName("contact").item(i);
            contactFields = contact.getChildNodes();

            for (int j = 0; j < contactFields.getLength(); j++) {
                if ((c.getName().getName()).equalsIgnoreCase(contactFields.item(j).getTextContent())) {
                    phone = doc.createElement("phone");
                    contact.appendChild(phone);
                    phone.appendChild(doc.createTextNode(String.valueOf(c.getPhoneNumber().getPhoneNumber())));
                }
            }
        }
        XmlUtil.TransformFactory(doc);
    }
    
    /**
     * This method displays all contacts
     * @return list of all contacts in Notebook.xml
     */
    public String displayAllContacts() throws ParserConfigurationException, SAXException, IOException {
        doc = XmlUtil.getDocument();
        StringBuilder result = new StringBuilder();

        contacts = doc.getElementsByTagName("contact");
        for (int i = 0; i < contacts.getLength(); i++) {
            contact = contacts.item(i);
            contactFields = contact.getChildNodes();
            result.append("\n");
            for (int j = 0; j < contactFields.getLength(); j++) {
                String title = contactFields.item(j).getNodeName().trim();
                result.append(title).append(": ").append(contactFields.item(j).getTextContent()).append("\n");
            }
        }
        return result.toString();
    }
    
    /**
     * This method searchs a contact by name
     * @param name name of contact, which necessary to find
     * @return contact, which you find
     */
    public String findContactByName(String name) throws ParserConfigurationException, SAXException, IOException {
        Node findName;      
        StringBuilder result = new StringBuilder();
        doc = XmlUtil.getDocument();

        names = doc.getElementsByTagName("name");
        for (int i = 0; i < names.getLength(); i++) {
            findName = names.item(i);
            if (name.equalsIgnoreCase(findName.getTextContent())) {
                contact = findName.getParentNode();
                contactFields = contact.getChildNodes();
                for (int j = 0; j < contactFields.getLength(); j++) {
                    String title = contactFields.item(j).getNodeName().trim();
                    result.append(title).append(": ").append(contactFields.item(j).getTextContent()).append("\n");
                }
            }
        }

        return result.toString();
    }

    /**
     * This method removes a contact by name
     * @param name contact, which necessary to remove
     */
    public void removeContact(String name) throws ParserConfigurationException, SAXException, IOException, TransformerException {      
        doc = XmlUtil.getDocument();
        names = doc.getElementsByTagName("name");

        for (int i = 0; i < names.getLength(); i++) {
            Node contactName = names.item(i);

            if (name.equalsIgnoreCase(contactName.getTextContent())) {
                contact = contactName.getParentNode();
                NodeList nodesForRemove = contact.getChildNodes();
                while (nodesForRemove.getLength() > 0) {
                    Node removingNode = nodesForRemove.item(0);
                    removingNode.getParentNode().removeChild(removingNode);
                }
            }
        }

        contacts = doc.getElementsByTagName("contact");
        for (int i = 0; i < contacts.getLength(); i++) {
            contact = contacts.item(i);
            if (!contact.hasChildNodes()) {
                contact.getParentNode().removeChild(contact);
            }
        }

        XmlUtil.TransformFactory(doc);

    }
}



Класс для работы с XML (для того, чтобы не вызывать несколько раз одни и те же куски кода, после записи/удаления из Notebook.xml):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package logic;

public class XmlUtil implements Data{
    public static Document getDocument() throws  SAXException, IOException, ParserConfigurationException{
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(FILE_NAME);
        return doc;
    }
    
    public static void TransformFactory(Document doc) throws TransformerException {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(FILE_NAME));
        transformer.transform(source, result);
    }
}
...
Рейтинг: 0 / 0
Покритикуйте код
    #38433574
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991, много замечаний, сразу видно что не хватает опыта практического. Не скажу что код полный отстой, сам так первые программы писал. Дерзай и все получится.

Из основных

1) заводить интерфейс ради константы - моветон, сразу видно что вы не понимаете что такое интерфейс
2) switch замените на паттерн команда(почитайте про него)
3) вы на каждый чих пересоздаете и перегружаете xml - это непроизводительно, подумайте как закэшить
4) классы Name Email - нафиг, хватит обычных стринговых переменных
...
Рейтинг: 0 / 0
Покритикуйте код
    #38433763
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991что нужно в нем изменить, чтоб улучшить?
используйте JAXB
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "contacts")
public class AddressBook {
	
	private List<Contact> contacts = new ArrayList<>();
	
	public AddressBook() {
		for (int i = 0; i < 10; i++) {
			contacts.add(new Contact("Name" + i, "Phone" + i, "Email" + i));
		}
	}
	
	@XmlElement(name = "contact")
	public List<Contact> getContacts() {
		return contacts;
	}
	
	public void setContacts(List<Contact> contacts) {
		this.contacts = contacts;
	}
	
	public String save() throws JAXBException {
		StringWriter writer = new StringWriter();
		JAXBContext context = JAXBContext.newInstance(this.getClass());
		Marshaller m = context.createMarshaller();
		m.marshal(this, writer);
		return writer.toString();
	}
	
	public void load(String xml) throws Exception {
		JAXBContext context = JAXBContext.newInstance(this.getClass());
		AddressBook ab = (AddressBook) context.createUnmarshaller().unmarshal(new StringReader(xml));
		setContacts(ab.getContacts());
	}
	
	public static class Contact {
		
		private String name;
		private String phone;
		private String email;
		
		public Contact() {
		}
		
		public Contact(String name, String phone, String email) {
			this.setName(name);
			this.setPhone(phone);
			this.setEmail(email);
		}

		@XmlElement(name = "full-name")
		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		@XmlElement(name = "phone-number")
		public String getPhone() {
			return phone;
		}

		public void setPhone(String phone) {
			this.phone = phone;
		}

		@XmlElement(name = "email-address")
		public String getEmail() {
			return email;
		}

		public void setEmail(String email) {
			this.email = email;
		}
		
		@Override
		public String toString() {
			return name + " : " + phone + " : " + email;
		}
	}
	
	public static void main(String[] args) throws Exception {
		AddressBook ab = new AddressBook();
		String xml = ab.save();
		System.out.println(xml);
		
		ab.setContacts(null);
		
		ab.load(xml);
		for (AddressBook.Contact contact: ab.getContacts()) {
			System.out.println(contact);
		}
	}
}


Замечание:
заворачивайте код в спойлер
...
Рейтинг: 0 / 0
Покритикуйте код
    #38433790
mr_goodkat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991,

Для работы с командной строкой используйте apache cli. А куда и на какую позицию ходили? Для джуниора код нормальный, в принципе. Видал я и от людей с опытом лет 5-10 говнокод копипастный и похлеще. Не так уж и все плохо.
...
Рейтинг: 0 / 0
Покритикуйте код
    #38434603
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВитяй1991, много замечаний, сразу видно что не хватает опыта практического. Не скажу что код полный отстой, сам так первые программы писал. Дерзай и все получится.

Из основных

1) заводить интерфейс ради константы - моветон, сразу видно что вы не понимаете что такое интерфейс
2) switch замените на паттерн команда(почитайте про него)
3) вы на каждый чих пересоздаете и перегружаете xml - это непроизводительно, подумайте как закэшить
4) классы Name Email - нафиг, хватит обычных стринговых переменных
Большое спасибо, мотаю на ус!
...
Рейтинг: 0 / 0
Покритикуйте код
    #38434604
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,
спасибо)
...
Рейтинг: 0 / 0
Покритикуйте код
    #38434605
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_goodkat,
да, это на джуниора
...
Рейтинг: 0 / 0
Покритикуйте код
    #38434770
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991mr_goodkat,
да, это на джуниора

Ну если на джуниора - код нормальный имхо, не знаю что там так сильно не понравилось. В общем пишите, пишите... опыт придет, код для джуниора неплохой
...
Рейтинг: 0 / 0
Покритикуйте код
    #38434843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В блоке switch много повторяющегося кода. Можно рефакторить.
...
Рейтинг: 0 / 0
Покритикуйте код
    #38435246
GaraZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991,

прикольно
сам недавно начал java изучать

поковыряю твой код )))
...
Рейтинг: 0 / 0
Покритикуйте код
    #38435456
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В HELPer как-то всё избыточно сложно. Хочется универсального подхода. Больше
Digester, больше XPath. Больше умных языков выборки. Если будут проблемы скорости
то их надо решать по мере возникновения. А сразу пытаться проектировать оптимизации
- это шаг к неоправданному усложнению.

И нет смысла создавать entites для Email, Name, Phone. Это переизбыток объектного
проектирования. Достаточно их сделать строками и просто поместить в Contact.
...
Рейтинг: 0 / 0
Покритикуйте код
    #38435566
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991,

Напрашивается сразу же реализация полиморфной комманды и выкидывание CASE-а по её типу.

Дальше не читал.
...
Рейтинг: 0 / 0
Покритикуйте код
    #38436052
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaraZ, удачи!)
вот исходники, если нужны ещё
...
Рейтинг: 0 / 0
Покритикуйте код
    #38436058
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ нет смысла создавать entites для Email, Name, Phone. Это переизбыток объектного
проектирования. Достаточно их сделать строками и просто поместить в Contact.
А был бы смысл, если б планировалось потом, добавить кроме просто телефона, ещё тел. домашний, рабочий, мобильный или адрес - домашний, рабочий и т.д., ну, чтобы всё в одну кучу не мешать, а по классам раскидать?
...
Рейтинг: 0 / 0
Покритикуйте код
    #38436075
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991maytonИ нет смысла создавать entites для Email, Name, Phone. Это переизбыток объектного
проектирования. Достаточно их сделать строками и просто поместить в Contact.
А был бы смысл, если б планировалось потом, добавить кроме просто телефона, ещё тел. домашний, рабочий, мобильный или адрес - домашний, рабочий и т.д., ну, чтобы всё в одну кучу не мешать, а по классам раскидать?

Вам надо учиться мыслить сущностями. По вашему вопросу - если в программе предполагается использовать сущность адрес, как-то найти кто жтвет в таком-то доме, в такой то квартире, в таком то городе - то имеет смысл вычленить класс Adress, если вам нужна тупо строка Россия, Кемеров, Ленина 17-52 для показа на экране - тогда смысла нет.
...
Рейтинг: 0 / 0
Покритикуйте код
    #38436079
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991maytonИ нет смысла создавать entites для Email, Name, Phone. Это переизбыток объектного
проектирования. Достаточно их сделать строками и просто поместить в Contact.
А был бы смысл, если б планировалось потом, добавить кроме просто телефона, ещё тел. домашний, рабочий, мобильный или адрес - домашний, рабочий и т.д., ну, чтобы всё в одну кучу не мешать, а по классам раскидать?
Есть разные уровни генерализации или абстракции. Тебе никто не запрещает забить в классе Map<String,String> attributes
и убить сразу всех зайцев. Ты получишь универсальное решение где будут телефоны, аськи, скайпы мессенджеры вконтактики
и прочие фейсбуки. Но в том виде в котором оно щас реализовано никакого смысла в инкапсулировании Name, Phone, Email
нету. У них нет общего интерфейса и рефлексию ты не используешь.

И аргумент "чтобы всё в одну кучу не мешать, а по классам раскидать" я принимаю когда есть метрики
к примеру размера исходного кода. Есть некий смысл не делать размер модуля более 7000 строк (с) Старина Вирт
и не мельчить сущности до 1 атрибута в каждой. Это тоже экстремизм проектирования. В конце концов
Java-девелопер получает деньги за программный продукт а не за количество классов и геттеров с сеттерами.
По сабжу они считаются "шумным" и бесполезным кодом.
...
Рейтинг: 0 / 0
Покритикуйте код
    #38436464
GaraZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витяй1991,

спасиб ))
я еще вчера скомпилил и поковырял ^_^
я пишу прогу и настройки в ней сохраняю в ini файле
вот думаю переписать чтобы хранить в xml
...
Рейтинг: 0 / 0
Покритикуйте код
    #38436487
MaxNevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник...
2) switch замените на паттерн команда(почитайте про него)
...

Вы можете объяснить чем здесь оправдано применения данного паттерна, чем оно лучше например простого набора статичных методов отвечающих за каждую отдельную операцию: addContact(...) addEmail(...) ... ? Или это просто блеснуть перед работодателем собственно самим знанием этого паттерна?
...
Рейтинг: 0 / 0
Покритикуйте код
    #38436492
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxNevermindИли это просто блеснуть перед работодателем собственно самим знанием этого паттерна?
"блеснуть" не получиться, если работодатель умеет отличать "команду" от "стратегии" и знает основное назначение обоих.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Покритикуйте код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]