所以我和一位同事就一段代码进行了友好的争论:
public sealed class NewObject
{
private string _stuff = string.Empty;
public string Stuff
{
get { return GetAllStuff(); }
}
private string GetAllStuff()
{
//Heavy string manipulation of _stuff
}
public NewObject(string stuffToStartWith)
{
_stuff = stuffToStartWith;
}
public static NewObject operator +(NewObject obj1, NewObject obj2)
{
if (obj1 == null)
throw new ArgumentNullException();
if (obj2 == null)
throw new ArgumentNullException();
NewObject result = new NewObject(string.Empty);
result._stuff = String.Concat(obj1._stuff, obj2._stuff);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
争论在于操作员覆盖.我的同事认为,除了构造函数之外,设置私有字段的值不是最好的编程习惯.我的同事提出的解决方案是重构Stuff属性的名称AllStuff并添加一个属性 …
div { background:url(smiley.gif) top left no-repeat }
Run Code Online (Sandbox Code Playgroud)
这是什么url()?我在网上找不到文档.
我是Ninject的新手,所以我确信这是我做错了,我只是不确定是什么.我在我的MVC3 Web应用程序中使用Ninject和Ninject.MVC3.这是我正在尝试做的一个例子.
我正在使用Repository模式:
public interface IRepository<T>
{
T Get(object id);
IList<T> GetAll();
void Add(T value);
void Update(T value);
void Delete(T value);
}
Run Code Online (Sandbox Code Playgroud)
对于具体类型:
public Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public Customer()
{
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有两个独立的存储库,一个需要注入数据库存储库的缓存版本:
public CachedCustomerRepository : IRepository<Customer>
{
private IRepository<Customer> _repository;
public Customer Get(object id)
{
Customer cust = new Customer();
IList<Customer> custs = GetAll();
if (custs != null && …Run Code Online (Sandbox Code Playgroud) 我特意在Ninject中使用C#,但问题不仅仅是Ninject.我的问题是我有几个类都有不同的构造函数参数加上注入的类.我知道我可以kernel.Get<MyObject>(constructor args here)用来实例化对象.这对我来说并不合适,因为我的内核遍布整个地方.我会尽力列出下面的例子.
我现在拥有的:
public interface IStore<T>
{
void CommitToDatabase(T item);
}
public abstract class Thing
{
private IStore<Thing> _store;
protected Thing(object key, IStore<Thing> store)
{
Key = key;
_store = store;
}
public object Key { get; private set; }
public virtual void Update()
{
_store.CommitToDatabase(this);
}
}
public class Person :Thing
{
public Person(object key, string name, int age, IStore<Thing> store)
: base(key, store)
{
Name = name;
Age = age;
}
public string Name { …Run Code Online (Sandbox Code Playgroud) c# design-patterns dependency-injection ninject object-construction
我的问题与此有关.虽然相关的问题和答案显示了我们为什么要将它们分开,但我想确保我对意图的理解是正确的.在我看过的所有示例中,似乎命令的意图是它可以被拒绝并且它更新内存中的对象,然后事件将更新数据库.现在我知道我在这里过度简化了,但是理解命令是为了更新内存和事件更新数据库是正确的吗?如果没有,有人可以请我澄清.
我正在努力学习这些模式,这就是我到目前为止所掌握的模式,我想确保它是正确的.提前致谢.
假设我有一个包含a int primary key,a varchar和bitvalue的表.请记住,我实际上并没有使用这样的东西,但它说明了我在SELECT声明中要做的事情.
仿表:
CREATE TABLE HorribleSample(
Id INT IDENTITY(1,1) NOT NULL,
Code VARCHAR(6) NOT NULL,
IsTrue BIT NOT NULL,
CONSTRAINT PK_HorribleSample PRIMARY KEY CLUSTERED(Id ASC)
)
Run Code Online (Sandbox Code Playgroud)
样本数据:
INSERT INTO HorribleSample VALUES('HELLO', 0)
INSERT INTO HorribleSample VALUES('WORLD', 1)
INSERT INTO HorribleSample VALUES('HELLO', 1)
INSERT INTO HorribleSample VALUES('WORLD', 1)
Run Code Online (Sandbox Code Playgroud)
我要做的是从结果集中选择最低位值.我以为我能做到:
SELECT MIN(IsTrue)
FROM HorribleSample
WHERE Code = 'HELLO'
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误,指出我不能MIN在bit字段上使用.
代码是HELLO,我希望0,但是当WORLD我想到的时候1.我怎么能做到这一点?它甚至可能吗?