我有课程项目,资源和文件。
项目包含资源的列表 每个资源都包含特定类型的文件的列表。
这映射到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的资源。 唯一的跟踪方法是在每个Resource类中使用文件集合。
任何帮助??
全部谢谢。
这是参考我在post
之前提出的问题答案 0 :(得分:1)
我理解的问题是:
截至目前,您的AddFileHelper
仅将文件添加到标有''resource1''
的项目资源,这是一个问题,因为每次文件类型“A”传递给您的AddFileHelper时,您都要为其创建新资源您的项目(''resource2''
)并将其添加到该项目中。
有一种非常简单的方法可以做到这一点。在AddFileHelper
内测试添加文件的FileType
,并确定是否需要将新资源添加到项目中。如果类型不是“A”,您将调用现在的代码并添加文件:
res.AddFile(path, type, id);
如果要添加的类型是“A”并且您需要新资源,只需重新定义res
并增加一个计数器变量,该变量包含项目中的资源数量:
Resource res = p.CreateProjectResource(resourceName);
resourceCounter++;
resourceName
是字符串:
string resourceName = ''resource'' + resourceCounter;
所有这些都应该作为AddFileHelper方法实现。
关于代码的整体结构,AddFileHelper应该是项目类方法。这就是原因:
AddFile
方法和AddFileHelper
方法听起来相似但做了两件非常不同的事情。 AddFile
方法属于资源类,因为它作用于定义良好的资源对象。但是,AddFile
方法对于您的目的来说还不够,因为要附加到的资源文件对于拥有文件并希望将其添加到项目的客户端来说并不是很明显。在可以调用AddFile
方法之前,需要确定目标资源。 AddFileHelper
方法的工作是确定哪个资源将调用AddFile
方法。因此,AddFileHelper
方法属于项目类,属于资源类的AddFile
方法。
如果将方法重命名为AddFileHelper
或类似的方法,FileResourceAssignment
方法和项目类之间的逻辑连接可能会更明显。