Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Collections #86

Closed
alvarofpp opened this issue Aug 28, 2019 · 1 comment
Closed

Collections #86

alvarofpp opened this issue Aug 28, 2019 · 1 comment

Comments

@alvarofpp
Copy link
Member

Debate sobre Collections

Atualmente, no que chegamos a planejar para o escopo da segunda versão do pacote, as classes passarão a representar uma única entidade (o que facilita algumas das várias funcionalidades que desejamos), por exemplo: Package representa exclusivamente um único pacote de dados.

O problema nisso é que perdemos, em parte, o poder de utilizar vários pacotes de uma vez. Por exemplo: se eu quisesse fazer uma manipulação em dois grupos de pacotes, ensino e pessoas, eu teria que criar uma lista e salvar ambos os pacotes nessa lista, porém as manipulações ficariam chatas, pois sempre teria que iterar na lista criada. Além de que eu irei possuir pacotes redundantes, nesse caso o pacote discentes está nos dois grupos.

Creio que seria interessante criarmos uma estrutura de dados como as várias Collections existentes. Um exemplo que poderíamos pegar como base seria a Collections do Laravel. Além de que poderíamos adicionar métodos que julgássemos relevantes.

Isso poderia ser expandido para Tag, como também criar alguma estrutura que armazene Package, independente dos pacotes serem do mesmo grupo ou não, tipo um PackageCollection.

Esse tipo de estrutura poderia nos ajudar a realizar operações de conjuntos, como intersect e merge.

Exemplo

Um exemplo que julgo interessante.

# Estou considerando que o __init__ do Group irá se comportar desse jeito
group_ensino = Group('ensino')
group_pessoas = Group('pessoas')

# Collection de grupos com ensino e pessoas MODO 1
groups = Groups(['ensino', 'pessoas'])
# Collection de grupos com ensino e pessoas MODO 2
groups = GroupCollection(['ensino', 'pessoas'])

# Descobrir quais pacotes estão em ambos os grupos
groups_intersect = groups.intersect()  # Retornaria, de certeza, o package de discentes

# Pegar a diferença entre dois grupos
groups_diff = group_ensino.diff(group_pessoas)

# Mesclar dois grupos de pacotes, resultando em apenas um imenso grupo
groups_merge = group_ensino.merge(group_pessoas)
# Em groups_merge teriamos uma lista de packages,
# porém sem os atributos que definem um único grupo,
# pois aqui englobaria dois grupos de pacotes.
# Uma alternativa seria ter atributos como `groups_name`, que seria uma lista
# com os nomes dos grupos que geraram aquele grande grupo.
@alvarofpp alvarofpp added the question Further information is requested label Aug 28, 2019
@alvarofpp alvarofpp added this to To do in Versão 1.0.0 -> 2.0.0 via automation Aug 28, 2019
@nymarya
Copy link
Member

nymarya commented Sep 28, 2019

Essas funcionalidades de intersect e merge, por exemplo, poderiam ser usadas depois da integração com o pandas, então não vemos vantagem em usar essa abordagem.

@nymarya nymarya closed this as completed Sep 28, 2019
Versão 1.0.0 -> 2.0.0 automation moved this from To do to Done Sep 28, 2019
@itepifanio itepifanio removed the question Further information is requested label Sep 28, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

No branches or pull requests

3 participants