Нахождение правильного шаблона для загружаемых объектов с различными графиками

Благодаря ответам выше я создал для этого модуль npm ( github )

Он работает с облачными функциями Google, просто установите его (npm install --save express-multipart-file-parser) и используйте его так:

const fileMiddleware = require('express-multipart-file-parser')

...
app.use(fileMiddleware)
...

app.post('/file', (req, res) => {
  const {
    fieldname,
    filename,
    encoding,
    mimetype,
    buffer,
  } = req.files[0]
  ...
})

1
задан Micah 22 June 2009 в 15:06
поделиться

2 ответа

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

Если вам нужен только один или два случая, то самое простое, что вы предлагаете, - создать отдельные методы GetPuzleWithXYZ () .

Вы также можете создать небольшой объект запроса с плавным интерфейсом.

Что-то вроде ...

public interface IPuzzleQuery
{
    IPuzzleLoadWith IdEquals(int id);
}

public interface IPuzzleLoadWith
{
    ISolutionLoadWith WithSolutions();

    IPuzzleLoadWith WithVotes();
}

public interface ISolutionLoadWith
{
    IPuzzleLoadWith AndSteps();
}

public class PuzzleQueryExpressionBuilder : IPuzzleQuery, IPuzzleLoadWith, ISolutionLoadWith
{
    public int Id { get; private set; }
    public bool LoadSolutions { get; private set; }
    public bool LoadVotes { get; private set; }
    public bool LoadSteps { get; private set; }

    public IPuzzleLoadWith IdEquals(int id)
    { 
        Id = id;
        return this;    
    }

    public ISolutionLoadWith WithSolutions()
    {
        LoadSolutions = true;
        return this;
    }

    public IPuzzleLoadWith WithVotes()
    {
        LoadVotes = true;
        return this;
    }

    public IPuzzleLoadWith AndSteps()
    {
        LoadSteps = true;
        return this;
    }
}

тогда ваш метод Repository Get () может создать экземпляр построителя выражений и передать его вызывающей стороне

public Puzzle Get(Action<IPuzzleQuery> expression)
{
    var criteria = new PuzzleQueryExpressionBuilder();

    expression(criteria);

    var query = _repository.All<Puzzle>().Where(x => x.Id == criteria.Id)

    if(criteria.LoadSolutions) ....

    if(criteria.LoadSteps) ....

    if(criteria.LoadVotes) ....

    ...
    ... 

    return query.FirstOrDefault();
}

и типичные вызовы будут выглядеть так ...

Puzzle myPuzzle = Repository.Get(where => where.IdEquals(101).WithSolutions());

Puzzle myPuzzle = Repository.Get(where => where.IdEquals(101).WithSolutions().AndSteps());

Puzzle myPuzzle = Repository.Get(where => where.IdEquals(101).WithVotes().WithSolutions());

нужно немного поработать, но вы можете увидеть основную идею.

2
ответ дан 3 September 2019 в 01:17
поделиться

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

Когда вы вызываете GetPuzzles (), вы должны загружать только корневую головоломку, а GetPuzzleById (int id) может загружать ассоциации.

Например, в API критериев: .SetFetchMode ("Solutions", NHibernate.FetchMode.Join)

Я не понимаю, почему вы не можете отложить загрузку. Если вы используете nHibernate, прокси вернется к базе данных для вас, когда вы получите доступ к свойству. Ваш контролер должен получить все необходимые данные. Вы не должны передавать незагруженный прокси в свое представление, тогда ваше представление должно обрабатывать случай, когда оно не может загрузить данные.

Таким образом, вы должны заставить контроллер загружать определенные фрагменты данных, которые вам нужны, чтобы загружать их только для пользователя,

0
ответ дан 3 September 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: