Puoi aiutarmi a capire questo modello di progettazione creato da un esperto di Java?

2

Ho ereditato il progetto da uno sviluppatore Java molto esperto. Il progetto è l'app per Android e il tizio che ha codificato ha molta esperienza nella codifica delle normali app Java. Ha introdotto alcune strutture di file che non ho mai incontrato prima (non ho codificato app Java al di fuori dell'area Android). Posso seguire il codice senza problemi e fino ad ora ho completato alcuni componenti aggiuntivi, ma ora mi piacerebbe sapere di più sul perché ha usato questo approccio poiché potrebbe aiutarmi a scrivere un codice migliore. D'altra parte, se il suo approccio non è adatto per le app Android, mi piacerebbe saperlo anche così non uso tali strutture.

Dividerò tutte le domande in punti.

  1. Quando si ha a che fare con un database, ha creato 3 livelli: entità, data_access e controller. Questo è un tipo di struttura MVC. È consigliabile utilizzarlo nelle app Android?

  2. Nella parte controller, ha creato la seguente struttura di file:

controller/
      async/
            AsyncAddObject.java
            AsyncExecutorAdd.java
            AsyncExecutorGetAll.java
          Entity1Controller.java
          Entity2Controller.java
          Entity3Controller.java
          IController.java

Tutti i file asincroni sono i generici.

Questa struttura ti è familiare? Ricordo gli esecutori utilizzati in Java, ma non ho mai usato un simile approccio nello sviluppo di Android. Se questo è un modo corretto, per cosa viene utilizzato Executor?

Che dire di IController.java - qualcosa di solito nella normale codifica Java?

+++++++++
Poi, quando vogliamo aggiungere qualche voce nel database, usa il seguente codice

Entity1 ent = new Entity1();
ent.setSomething(someParameter);

AsyncAddObject<Entity1> obj = new AsyncAddObject<Entity1>();
obj.setController(mEntity1Controller);
obj.setObj(ent);
new AsyncExecutorAdd<Entity1>().execute(obj);

Questo aspetto ti confonde? Io di solito chiamo un metodo di database e passo l'oggetto ad esso. Ad esempio, lo farei come questo

Entity1 ent = new Entity1();
ent.setSomething(someParameter);

MyDatabaseClass.addEntity1(ent); //just an example, adding to database will be done on non-Main thread. 

Questo è tutto. Mi scuso per un lungo post.

    
posta deviDave 16.08.2013 - 10:55
fonte

1 risposta

3

Gli eventi Android sono attivati sul thread principale dell'interfaccia utente, ma non puoi eseguire alcun lavoro sul thread principale dell'interfaccia utente.

Ciò che lo sviluppatore potrebbe fare è inviare l'attività di addObject a un altro thread in modo che il thread dell'interfaccia utente principale possa continuare.

Sembra che abbia creato alcune classi per rendere questo tipo di attività facile da fare. Questa è una buona pratica, ma sto facendo un'ipotesi. Senza vedere il codice di questi file non lo sapremo per certo.

Nel tuo esempio;

MyDatabaseClass.addEntity1(ent);

Se ciò sta scrivendo su un database SQLite sul dispositivo Android, c'è il rischio che il database sia memorizzato su una scheda SD. Le schede SD sono un collo di bottiglia per le prestazioni sui dispositivi mobili e questo bloccherebbe il thread dell'interfaccia utente principale. Non dovresti svolgere attività che richiedono tempo su quel thread.

Non sono nemmeno sicuro se Android ti permetterà di farlo. Vi sono alcuni casi in cui l'SDK genera un'eccezione se si tenta di eseguire determinate operazioni nel thread principale.

    
risposta data 16.08.2013 - 11:21
fonte

Leggi altre domande sui tag