Pergunta

Estou trabalhando no projeto pessoal, que é basicamente um editor de código. Imagine o menu de arquivo padrão com itens de menu novos, abertos, salve, salve como, salve tudo, feche, feche tudo.

Estou preso com o design adequado. Atualmente eu tenho:

  • Uma classe de documento que representa um controle de edição de código, respectivo guia na barra de guias e várias propriedades como legenda, nome do arquivo, ismodificado etc.
  • Uma classe de documentos que representa todos os documentos abertos. Contém métodos como novo, open (nome do arquivo), ...

O problema é que não consigo descobrir qual comando de classe / menu é responsável por quais tarefas.

Por exemplo, com arquivo-> novo comando de menu é simples - ligue para documentos.new e é isso.

Mas o que para arquivo-> abrir? O método documents.open espera o nome do arquivo como um parâmetro. Portanto, antes de chamar esse método, preciso abrir uma caixa de diálogo de seleção de arquivos, deixe o usuário selecionar arquivos e para cada arquivo de chamada documentos.open (nome do arquivo). Onde está o melhor lugar para este código de suporte, no comando de menu, reescreva documentos. Open e coloque -o lá?

O mesmo com as ações salvos. Qual é o responsável por salvar? É a classe Documents, que usa document.editor.savetofile (nome do arquivo) ou melhor, crie o método de salvar na classe de documentos? Em algum lugar no meio, também precisa perguntar ao usuário se ele deseja salvar o documento atual ...

Estou preso. Alguma ideia?

Editado: A linguagem de programação é Delphi.

Foi útil?

Solução

IMHO, você está adicionando muitas responsabilidades à sua classe de documentos. A única responsabilidade da classe de documentos deve ser manter a coleta de documentos com algum recurso relacionado (por exemplo, lidar com várias instâncias do mesmo documento, verifique se todos os documentos estão fechados, contam crianças etc.)

Abrir um documento ou até criar um novo documento (por exemplo, e se você precisar escolher um formato) são operações separadas que resultam em um novo documento que é adicionado à classe Documents. Na minha opinião, você nem deve interagir com a classe Documents até estar pronto para entregar o objeto de documento.

Espero que você tenha alguma classe para representar a interface do usuário e interagir com o usuário para obter todas as informações necessárias para criar ou abrir um arquivo. Você deve lidar com tudo a partir daí. Caso contrário, você está contaminando seu modelo com coisas relacionadas à interface do usuário.

Outras dicas

Você precisa de um objeto Singleton (DocumentManager) que gerencia todas as operações de documentos. Isso terá funções como:

  • Get (Idlist)
  • GetNew
  • Salvar (doclist)
  • Atualizar
  • etc ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top