Consenti alle entità di proprietà di un utente di fare riferimento alle entità di altri utenti

1

Sto lavorando su un'applicazione Web ASPC di ASP.NET.

Ho le seguenti entità (semplificate):

public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public User CreatedBy { get; set; }
    public EventArea EventArea { get; set; }
}

public class EventArea
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public User CreatedBy { get; set; }
    public CoOrdinate CoOrdinate { get; set; }
}

public class CoOrdinate
{
    public int Id { get; set; }
    public int Latitude { get; set; }
    public int Longitude { get; set; }
}

Gli utenti possono registrarsi e creare le proprie entità del corso. Ogni corso ha una posizione geografica, rappresentata da una EventArea che può anche essere creata da un utente.

Poiché EventArea rappresenta una posizione geografica, dovrebbe essere disponibile per l'uso da parte di altri utenti che desiderano creare un corso nella stessa posizione.

Tuttavia, rendere le entità EventArea disponibili per gli utenti diversi dal creatore solleva le seguenti domande:

  1. Che cosa succede se EventArea viene modificato o eliminato dall'utente di creazione?
  2. Chi dovrebbe essere in grado di visualizzare / modificare / modificare un'entità EventArea?

Qualche suggerimento alternativo su come affrontare uno scenario in cui un'entità creata da un utente può essere referenziata da un altro utente?

    
posta TonE 08.09.2014 - 15:44
fonte

1 risposta

1

how to approach a scenario where an entity created by one user can be referenced by a different user?

Stai acquisendo CreatedBy . In questo modo puoi sapere chi è connesso, quindi puoi abilitare la modificabilità sulla pagina web per quelle cose create da quell'utente.

Who should be able to view/edit/modify an EventArea entity?

What happens if the EventArea is modified or deleted by the creating user?

Questo dipende interamente dai tuoi requisiti di sistema. Solo tu puoi rispondere a queste domande.

Mi sembra che se qualche utente può creare un EventArea, allora è possibile creare 2 o più EventAreas che sono in realtà lo stesso posto fino alla precisione del proprio sistema di coordinate e con esattamente il stesso nome.

Fai più analisi dei requisiti

an EventArea represents a geographical location

Se una "area eventi" può essere qualsiasi 10 "x 10" spot in qualsiasi spazio pubblico in qualsiasi parte del paese, allora forse gli utenti dovrebbero essere in grado di crearli. Ma se stiamo parlando di auditorium, stadi, campus, edifici, classi ecc. Esistenti, allora forse dovrebbero essere creati da te e gli utenti possono selezionarne solo uno.

E quindi forse an EventArea represents a place (classroom?), that has a geographical location

Non consentire i tasti modificabili dall'utente

Se Id è una chiave primaria o esterna nel tuo database, public ... set è una cattiva idea. Non consentire mai agli utenti di modificare le chiavi. Forse potevano crearli mentre creavano un oggetto - Ho avuto un caso in cui ciò aveva senso - ma mai lascia che una chiave esistente sia modificata.

Incapsula la creazione di oggetti

Utilizza i parametri del costruttore per controllare la creazione dell'oggetto, invece di esporre pubblicamente tutte le proprietà. Altrimenti imponi al codice client di sapere tutto sulla creazione di qualcosa. Entrata richiesta? Intervalli? Combinazioni di proprietà valide? ecc. ecc.

In questo caso mi aspetto di vedere qualcosa di simile a questo:

public class Course
{
    public int Id { get; protected set; }
    public string Name { get; protected set; }
    public string Description { get; protected set; }
    public User CreatedBy { get; protected set; }
    public EventArea EventArea { get; protected set; }

    public Course (string name, string description, EventArea area) {
        this.Name = name;
        this.Description = description;
        this.EventArea = area;
        this.Id = GenerateID();
        this.CreatedBy = FetchLoggedOnUser();
    }
}
    
risposta data 08.09.2014 - 19:18
fonte

Leggi altre domande sui tag