我看到很多C#,.net问题在这里使用反射解决了.对我来说,很多它们看起来像是以优良设计(OOP)为代价而弯曲规则.许多解决方案看起来不可维护且"脚本".
使用反射一般是一种好习惯吗?有些事情只能通过反思来解决吗?
编辑:
请举例说明反射是唯一的好解决方案.
以下是要求:
必须是字母数字,8-10个字符,以便用户友好.这些将作为唯一键存储在数据库中.我使用Guids作为主键,因此使用GUID生成这些唯一ID的选项将更可取.
我正在考虑一个base-n转换器的线路,它接受一个Guid并转换为一个8字符的唯一字符串.
简短,轻量级算法是首选,因为它会经常被调用.
举个例子:
interface IEntity {
string Name { get; set; }
}
class Product : IEntity {
public string Name { get; set; }
public int Count { get; set; } // added member
}
class Client {
void Process() {
var product = new Product();
int count = product.Count; // this is valid
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,什么是产品类型?是IEntity还是产品?看来产品是具体实施类型(产品).如果是这种情况,则不应仅在特殊情况下使用var.但我发现像resharper这样的工具建议默认使用var.不应该有一个程序到界面?
是否建议使用自引用通用继承?
public abstract class Entity<T> {
public Guid Id {get; set;}
public int Version {get; set;}
public T Clone() {
...
// clone routine
...
return T;
}
}
public class Customer : Entity<Customer> {
public string CustomerName {get; set;}
...
}
Run Code Online (Sandbox Code Playgroud)
如何将Customer转换为基本实体类?"客户:实体"提供了哪些优势?我在示例中看到了这种继承,显示了NHibernate域建模.
没有泛型,使用"客户:实体"会更好吗?