向项目添加资源的设计

2024-05-02

我有课Project,Resource and File. where

A Project包含列表资源.
Each Resource包含以下列表Files特定类型的。

这被映射到 XML :

<Project>
<Resource id=1>
<File id="1" path="" type="A" />
<File id="2" path="" type="B" />
<File id="3" path="" type="B" />
<File id="4" path="" type="B" />
</Resource>
<Resource id=2>
<File id="1" path="" type="A" />
<File id="2" path="" type="B" />
<File id="3" path="" type="B" />
<File id="4" path="" type="B" />
</Resource>    
</Project>

因此基本上每个资源最多只能有一个“A”类型的文件和任意数量的“B”类型的文件。文件类型由用户从对话框中选择,在该对话框中选择文件并将其添加到资源中。

问题是对于每个“A”类型的文件,我需要创建一个新的资源,因此需要在 XML 中创建新的节点。(我当前的代码无法做到这一点)

最初我带来了以下内容(为简洁起见)

    Project p =new Project("Untitled project"); //Will happen once per project
    Resource res = p.CreateProjectResource("resource1"); 
                  //various params to create resource 
    p.AddResource(res);
    
    //now lets add files to a resource 
    AddFileHelper(res,"C:\myfile1.bin","A",guid.toString()); 
    AddFileHelper(res,"C:\myfile32.bin","B",guid.toString());
    AddFileHelper(res,"C:\myfile56.bin","B",guid.toString());

  
    //The next statement should create a new resource and add the  file to 
    //the new created design
    AddFileHelper(res,"C:\myfile4.bin","A",guid.toString()); // 
    
   //some helper class     :
    //Adds a file of type "type" to a resource "res" with file ID as "id" 
    private AddFileHelper(Resource res,string path,FileType type,string id)
    {
         // path is user defined file path from OpenFile dialog, 
        //type is selected from a Dropdown (of Enum values "A","B",...)
        //id is GUID
        res.AddFile(path,type,id); 
        
       //************ OR it could be also written as  *******
       //ResFile file =new ResFile(path,type,id); 
       //res.AddFile(file);  
                 
       //Update XML file here.. 
    }

主要问题是用户没有“显式”创建资源(第一个资源除外),并且新资源的创建取决于用户添加的文件的类型。

此外,由于这种设计,很难根据文件 ID 找出资源。 唯一的跟踪方法是使用每个资源类中的文件集合。

有什么帮助吗?

谢谢大家。

这是参考我之前问过的一个问题post https://stackoverflow.com/questions/3116941/designhow-to-of-classes-containing-collections-of-other-classes


据我了解,问题是:

截至目前,您的AddFileHelper只将文件添加到标记为的项目资源中''resource1''这是一个问题,因为每次文件类型“A”传递给您的 AddFileHelper 时,您都会为您的项目创建一个新资源(''resource2'')并将其添加到其中。

有一个非常简单的方法可以做到这一点。之内AddFileHelper测试FileType添加的文件的名称,并确定是否需要将新资源添加到项目中。如果类型不是“A”,您将调用您现在拥有的代码并使用以下命令添加文件:

res.AddFile(path, type, id);

如果添加的类型是“A”并且需要新的资源,只需重新定义res并增加一个计数器变量来表示您的项目中有多少资源:

Resource res = p.CreateProjectResource(resourceName);
resourceCounter++;

Where resourceName是字符串:

string resourceName = ''resource'' + resourceCounter;

所有这些都应该作为您的 AddFileHelper 方法来实现。

关于代码的整体结构,AddFileHelper 应该是一个项目类方法。原因如下:

The AddFile方法,以及AddFileHelper方法听起来很相似,但做了两件截然不同的事情。这AddFile方法属于资源类,因为它作用于定义良好的资源对象。但是,那AddFile方法不足以满足您的目的,因为要附加的资源文件对于拥有文件并希望将其添加到您的项目的客户来说并不是立即显而易见的。 B之前AddFile方法可以被调用,需要确定目标资源。的工作AddFileHelper方法是确定哪个资源将调用AddFile方法。因此,AddFileHelper方法属于项目类并且AddFile资源类的方法。

之间的逻辑联系AddFileHelper如果将该方法重命名为,方法和项目类可能会更明显FileResourceAssignment或类似的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向项目添加资源的设计 的相关文章

随机推荐